POJ-2823-Sliding Window

来源:互联网 发布:2017最新资金盘源码 编辑:程序博客网 时间:2024/05/16 18:46

本来想看一个题的解题报告,无意中搜索到这个题,因为这个题主要是单调队列,所以就做了。

关于单调队列请看:http://www.felix021.com/blog/read.php?1965

最后再参考了这位大牛的博客:http://blog.csdn.net/hyogahyoga/article/details/7829830

然后基本懂了,主要是觉得这位大牛实现得比较简单,膜拜~

直接代码吧:


#include<cstdio>#include<cstring>#define MAX 1000001int n,k,a[MAX],q[MAX];void GetMin(){    int front=1,last=q[1]=1;    for(int i=1;i<=n;i++)    {if(front<=last&&q[front]<i-k+1)    front++;while(front<=last&&a[i]<=a[q[last]])    last--;q[++last]=i;if(i>=k)    printf("%d%c",a[q[front]],i==n?'\n':' ');    }}void GetMax(){    int front=1,last=q[1]=1;    for(int i=1;i<=n;i++)    {if(front<=last&&q[front]<i-k+1)    front++;while(front<=last&&a[i]>=a[q[last]])    last--;q[++last]=i;if(i>=k)    printf("%d%c",a[q[front]],i==n?'\n':' ');    }}int main(){    while(scanf("%d%d",&n,&k)!=EOF)    {for(int i=1;i<=n;i++)    scanf("%d",&a[i]);GetMin();GetMax();    }    return 0;}



原创粉丝点击