移动窗口.acwing.831

code:

#include<bits/stdc++.h>
using namespace std;
const int N=1000010;
int a[N],b[N],k,n,x;
int read()
{
    int f=1,ans=0;char c=getchar();
    while(c>'9'||c<'0'){if(c=='-')f=-f;c=getchar();}
    while(c>='0'&&c<='9'){ans=(ans<<3)+(ans<<1)+c-'0';c=getchar();}
    return f*ans;
}
int main()
{
    n=read();k=read();
    for(int i=1;i<=n;i++)a[i]=read();
    int l=1,r=0;
    for(int i=1;i<=n;i++)
    {
        while(l<=r&&i-b[l]+1>k)l++;
        while(l<=r&&a[b[r]]>=a[i])r--;
        b[++r]=i;
        if(i>=k)printf("%d ",a[b[l]]);
    }
    puts("");
    l=1,r=0;
    for(int i=1;i<=n;i++)
    {
        while(l<=r&&i-b[l]+1>k)l++;
        while(l<=r&&a[b[r]]<=a[i])r--;
        b[++r]=i;
        if(i>=k)printf("%d ",a[b[l]]);
    }
    return 0;
}

 

posted @ 2020-12-25 16:20  纸上的彩虹  阅读(66)  评论(0)    收藏  举报