POJ 2823 Sliding Window 单调队列

这道题就是用单调队列来维护,但是用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"); }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值