POJ 2823 Sliding Window (单调队列)

单调队列

加了读入挂比不加更慢。。。。

而且这份代码要交c++

有大神G++跑了700ms。。。。。

orzorzorz

#include<iostream>
#include<cstdio>
using namespace std;
int a[1000086];
int num[1000086];
int fi,la;
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    fi=la=0;
    for(int i=1;i<=n;i++){
        while(fi<la&&a[num[la-1]]>a[i]){
            la--;
        }
        num[la++]=i;
        if(num[fi]<i-m+1){fi++;}
        if(i>=m){
            printf("%d ",a[num[fi]]);
        }
    }printf("\n");
    fi=la=0;
    for(int i=1;i<=n;i++){
        while(fi<la&&a[num[la-1]]<a[i]){
            la--;
        }
        num[la++]=i;
        if(num[fi]<i-m+1){fi++;}
        if(i>=m){
            printf("%d ",a[num[fi]]);
        }
    }printf("\n");
}

  

posted @ 2018-08-03 21:56  断腿三郎  阅读(111)  评论(0编辑  收藏  举报