比赛 Segment Tree Competition 评测结果 AAAAAAAAA
题目名称 滑动窗口 最终得分 100
用户昵称 宋逸群 运行时间 1.105 s
代码语言 C++ 内存使用 11.73 MiB
提交时间 2016-08-28 21:52:58
显示代码纯文本
#include<cstdio>
using namespace std;
#define N 1000010
int a[N],num[N],q[N],h=1,t;
inline int read(){
    register int x=0,f=1;
    register char ch=getchar();
    while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    return x*f;
}
int main(){
	freopen("window.in","r",stdin);
	freopen("window.out","w",stdout);
    int n=read(),k=read();
    for(int i=1;i<=n;i++) a[i]=read();     
    for(int i=1;i<k;i++){
        while(a[i]<q[t]&&t>=h) t--;
        q[++t]=a[i];num[t]=i;
        if(i-num[h]+1>k) h++;
    }
    for(int i=k;i<=n;i++){
        while(a[i]<q[t]&&t>=h) t--;
        q[++t]=a[i];num[t]=i;
        if(i-num[h]+1>k) h++;
        printf("%d ",q[h]);
    }
    h=1;t=0;putchar('\n');
    for(int i=1;i<k;i++){
        while(a[i]>q[t]&&t>=h) t--;
        q[++t]=a[i];num[t]=i;
        if(i-num[h]+1>k) h++;
    }
    for(int i=k;i<=n;i++){
        while(a[i]>q[t]&&t>=h) t--;
        q[++t]=a[i];num[t]=i;
        if(i-num[h]+1>k) h++;
        printf("%d ",q[h]);
    }
    return 0;
}