您的位置:首页 > 其它

POJ 2823 Sliding Window 单调队列

2011-11-21 22:41 393 查看
这道题就是用单调队列来维护,但是用G++交TLE,用c++5000多ms,真是囧...代码很丑,就凑合着看吧
#include<stdio.h>
int a[1000009],que[1000009];
int main(){
int n,k,i,head,tail,flag=1,f;
scanf("%d %d",&n,&k);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
head=1;tail=0;
f=1;
for(i=1;i<=n;i++){
while(tail>=head && a[i]<a[que[tail]])
tail--;
que[++tail]=i;
if(i>=k){
if(que[head]<f)
head++;
if(flag){
printf("%d",a[que[head]]);
flag=0;
}
else
printf(" %d",a[que[head]]);
f++;
}
}
printf("\n");

head=1;tail=0;
flag=1;
f=1;
for(i=1;i<=n;i++){
while(tail>=head && a[i]>a[que[tail]])
tail--;
que[++tail]=i;
if(i>=k){
if(que[head]<f)
head++;
if(flag){
printf("%d",a[que[head]]);
flag=0;
}
else
printf(" %d",a[que[head]]);
f++;
}
}
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: