UVA 1471 Defense Lines 单调队列 -
来源:互联网 发布:三天打鱼两天晒网c语言 编辑:程序博客网 时间:2024/05/16 00:26
题目地址:http://vjudge.net/problem/UVA-1471
#include <bits/stdc++.h>using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)const int maxn=200000+5;int a[maxn],f[maxn],g[maxn];struct Node{int a,g;bool operator < (const Node& src) const {return a<src.a;}};set<Node> s;int main(int argc, char const *argv[]){int T,n; scanf("%d",&T);while(T--&&scanf("%d",&n)==1){REP(i,1,n) scanf("%d",&a[i]);if(n==1) {printf("1\n"); continue;}g[1]=1;REP(i,2,n) if(a[i]>a[i-1]) g[i]=g[i-1]+1; else g[i]=1;f[n]=1;REPD(i,n-1,1) if(a[i]<a[i+1]) f[i]=f[i+1]+1; else f[i]=1;s.clear(); s.insert(Node{a[1],g[1]});int ans=1;REP(i,2,n){Node c=Node{a[i],g[i]};set<Node>::iterator it=s.lower_bound(c);bool keep=true;if(it!=s.begin()){Node last=*(--it);ans=max(ans,f[i]+last.g);if(last.g>=g[i]) keep=false;}if(keep){s.erase(c);s.insert(c);it=s.find(c);it++;while(it!=s.end()&&c.a<=it->a&&c.g>=it->g) s.erase(it),it++;}}printf("%d\n", ans);}return 0;}
0 0
- UVA 1471 Defense Lines 单调队列优化
- UVA 1471 Defense Lines 单调队列 -
- UVA 1471 Defense Lines(set维护二元组单调队列)
- uva 1471Defense Lines
- uva 1471 Defense Lines
- UVA 1471 Defense Lines
- UVA 1471 Defense Lines
- UVA - 1471 Defense Lines
- uva 1471 - Defense Lines(高效)
- UVA - 1471 Defense Lines 防线
- UVA 1471(p242)----Defense Lines
- UVa OJ 1471 - Defense Lines
- Uva 1471 Defense Lines(线段树)
- UVA 1471 - Defense Lines(扫描+二分)
- uva 1471 Defense Lines (降低复杂度)
- UVA - 1471 Defense Lines 贪心+二分
- UVA - 1471 Defense Lines 神奇的解法
- UVA 1471 Defense Lines (STL + 二分)
- Netty框架(二)————NIO编程
- 【NOIP2010】乌龟棋 dp
- Session缓存和Cache缓存
- 不占用windows用户对象的定时器
- Mysql笔记+sql语句
- UVA 1471 Defense Lines 单调队列 -
- Spring配置文中解析xsd文件版本
- LWIP[转]为什么ping时间会越来越长
- 【模板】K短路
- apache下用expires_module让浏览器缓存静态文件
- LWIP[转]LwIP BUG之ARP缓存
- session运行机制
- 离散时间系统的相位响应
- Session与Cookie的运行机制