[BZOJ2096][POI]Pilots
来源:互联网 发布:碧空尽知什么 编辑:程序博客网 时间:2024/05/23 00:01
POI数据范围神题
单调队列维护区间最大值和区间最小值
每次超过k的时候优先弹出那个靠前的 这样比较优
更新的时候千万注意 你是拿出来了比那个刚好不行的稍微大那么1的点
因此你更新的时候一定要记得+1
虽然我也不知道为什么直接拿区间点更新为什么不行……但是他就是不行……
即使我改过了初始答案也不行……哪位神犇假如知道第二段代码该怎么改请告诉我
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<queue>#include<stack>#include<map>#include<set>#include<algorithm>#include<iomanip>using namespace std;typedef pair<int,int> pii;const int INF = 0x7f7f7f7f;inline long long init(){ long long now=0,ju=1;char c;bool flag=false; while(1) { c=getchar(); if(c=='-')ju=-1; else if(c>='0'&&c<='9') { now=now*10+c-'0'; flag=true; } else if(flag)return now*ju; }} inline int read(){ int now=0,ju=1;char c;bool flag=false; while(1) { c=getchar(); if(c=='-')ju=-1; else if(c>='0'&&c<='9') { now=now*10+c-'0'; flag=true; } else if(flag)return now*ju; }}int inqueue[3000005],dequeue[3000005],inhead=1,dehead=1,intail=0,detail=0;long long a[3000005],n,m;int main(){ //freopen("in.txt","r",stdin); //freopen("a.txt","w",stdout); m=init();n=init(); for(int i=1;i<=n;i++) { a[i]=init(); } int ans=0; int tmp=1; for(int i=1;i<=n;i++) { while(a[i]<=a[inqueue[intail]]&&intail>=inhead) { intail--; } inqueue[++intail]=i; while(a[i]>=a[dequeue[detail]]&&detail>=dehead) { detail--; } dequeue[++detail]=i; while(a[dequeue[dehead]]-a[inqueue[inhead]]>m&&inhead<=intail&&dehead<=detail) { if(inqueue[inhead]<dequeue[dehead]) { tmp=inqueue[inhead]+1; inhead++; } else { tmp=dequeue[dehead]+1; dehead++; } } ans=max(ans,i-tmp+1); } printf("%d\n",ans); return 0;}
WrongAnswer:
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<queue>#include<stack>#include<map>#include<set>#include<algorithm>#include<iomanip>using namespace std;typedef pair<int,int> pii;const int INF = 0x7f7f7f7f;inline long long init(){ long long now=0,ju=1;char c;bool flag=false; while(1) { c=getchar(); if(c=='-')ju=-1; else if(c>='0'&&c<='9') { now=now*10+c-'0'; flag=true; } else if(flag)return now*ju; }} inline int read(){ int now=0,ju=1;char c;bool flag=false; while(1) { c=getchar(); if(c=='-')ju=-1; else if(c>='0'&&c<='9') { now=now*10+c-'0'; flag=true; } else if(flag)return now*ju; }}int inqueue[3000005],dequeue[3000005],inhead=1,dehead=1,intail=0,detail=0;long long a[3000005],n,m;int main(){ //freopen("in.txt","r",stdin); //freopen("a.txt","w",stdout); m=init();n=init(); for(int i=1;i<=n;i++) { a[i]=init(); } int ans=1; int tmp=1; for(int i=1;i<=n;i++) { while(a[i]<=a[inqueue[intail]]&&intail>=inhead) { intail--; } inqueue[++intail]=i; while(a[i]>=a[dequeue[detail]]&&detail>=dehead) { detail--; } dequeue[++detail]=i; while(a[dequeue[dehead]]-a[inqueue[inhead]]>m&&inhead<=intail&&dehead<=detail) { if(inqueue[inhead]<dequeue[dehead]) { tmp=inqueue[inhead]; inhead++; } else { tmp=dequeue[dehead]; dehead++; } } ans=max(ans,i-tmp); } printf("%d\n",ans); return 0;}
0 0
- [BZOJ2096][POI]Pilots
- bzoj2096 pilots
- BZOJ2096 Pilots
- bzoj2096【poi2010】Pilots
- 【POI2010】【BZOJ2096】Pilots
- BZOJ2096 [Poi2010]Pilots
- 【POI2010】BZOJ2096 pilots
- bzoj2096 [Poi2010]Pilots
- 【bzoj2096】[Poi2010]Pilots
- BZOJ2096 [Poi2010]Pilots
- 【bzoj2096】[Poi2010]Pilots 单调队列
- [BZOJ2096][Poi2010]Pilots(单调队列)
- [bzoj2096][Poi2010]Pilots(二分+单调队列)
- BZOJ2096: [Poi2010]Pilot
- Pilots(pilots)题解
- poi
- POI
- POI
- Oracle数据库(十二)触发器
- angularJS Html5 的video src属性
- UILabel正常显示省略号的做法
- OpenGL 笔记
- 完全基于KnockoutJs实现的分页查询
- [BZOJ2096][POI]Pilots
- 1号店分库
- 第一个网路爬虫
- Linux常用命令(转自:http://www.cnblogs.com/laov/p/3541414.html)
- Python sys模块
- JavaScript 数组方法
- 第七周项目四 队列数组
- JSContext监控UIWebView上JS事件,并执行JS方法,实现js与ios方法互调
- yum的设置文件设置-CentOS yum 源的配置与使用