poj2823 Sliding Window
来源:互联网 发布:软件 系统架构图 编辑:程序博客网 时间:2024/05/22 17:10
单调队列维护(以求最大值为例:每次现在队尾维护,删除掉比<=x的元素,插入x,因为删除的元素比x小而且比x出的早,没有用了!然后再在队首维护,因为是按下表从小到大排列的,只需把队首该出队的删除了,剩下的队首就是答案)
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#define N 1000050using namespace std;struct xxx{ int pos,v;}que1[N],que2[N];int head1,tail1,head2,tail2,maxn[N],minn[N];int main(){ memset(que1,0,sizeof(que1)); memset(que2,0,sizeof(que2)); memset(maxn,0,sizeof(maxn)); memset(minn,0,sizeof(minn)); head1=head2=0; tail1=tail2=-1; int n,k,x,temp; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) { scanf("%d",&x); while(head1<=tail1&&que1[tail1].v<=x)tail1--; que1[++tail1].v=x;que1[tail1].pos=i; temp=i-k; if(temp<0)temp=0; while(que1[head1].pos<=temp)head1++; maxn[i]=que1[head1].v; while(head2<=tail2&&que2[tail2].v>=x)tail2--; que2[++tail2].v=x;que2[tail2].pos=i; temp=i-k; if(temp<0)temp=0; while(que2[head2].pos<=temp)head2++; minn[i]=que2[head2].v; } for(int i=k;i<n;i++) printf("%d ",minn[i]); printf("%d\n",minn[n]); for(int i=k;i<n;i++) printf("%d ",maxn[i]); printf("%d\n",maxn[n]); return 0;}PS:C++ AC了,G++ TLE了。。。- -#为神马?
- 單調隊列::poj2823 Sliding Window
- poj2823 Sliding Window
- POJ2823:Sliding Window
- POJ2823--Sliding Window
- POJ2823 Sliding Window
- [Poj2823]Sliding Window
- poj2823 Sliding Window
- POJ2823 Sliding Window
- poj2823 Sliding Window
- POJ2823 Sliding Window
- 【poj2823】Sliding Window
- poj2823 Sliding Window
- POJ2823 Sliding Window
- poj2823 Sliding Window
- poj2823 -- Sliding Window
- POJ2823-Sliding Window
- poj2823 Sliding Window
- POJ2823-Sliding Window
- Activity的Launch mode详解 singleTask正解
- WP中去掉固定链接中的index.php和category
- HDU 3954 level up 线段树
- cve 2010-0842 Oracle Java MixerSequencer Object GM_Song Structure Handling Vulnerability
- android或java用DES加密解密文件
- poj2823 Sliding Window
- mismatch详解
- Dev C++ 与 ACM/ICPC程序设计在线评判系统
- linux支持大于4G内存
- 巡线车程序(完整版,也是最先的版本)
- lexicographical_compare详解
- 预处理命令详解
- iOS: UI 开发
- copy/copy_backward