/* 裸地单调队列.. 第一次写 写的好丑.... */ #include<iostream> #include<cstdio> #include<cstring> #define maxn 1000010 using namespace std; int n,k,x,a[maxn],t[maxn],q[maxn],head=1,tail; int init() { int f=1,x=0;char s=getchar(); while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();} return x*f; } int main() { n=init();k=init(); for(int i=1;i<=n;i++)a[i]=init(); for(int i=1;i<=k-1;i++) { x=a[i]; while(x<q[tail]&&tail>=head)tail--; q[++tail]=x;t[tail]=i; if(i-t[head]+1>k)head++; } for(int i=k;i<=n;i++) { x=a[i]; while(x<q[tail]&&tail>=head)tail--; q[++tail]=x;t[tail]=i; if(i-t[head]+1>k)head++; printf("%d ",q[head]); } tail=0;head=1;printf(" "); for(int i=1;i<=k-1;i++) { x=a[i]; while(x>q[tail]&&tail>=head)tail--; q[++tail]=x;t[tail]=i; if(i-t[head]+1>k)head++; } for(int i=k;i<=n;i++) { x=a[i]; while(x>q[tail]&&tail>=head)tail--; q[++tail]=x;t[tail]=i; if(i-t[head]+1>k)head++; printf("%d ",q[head]); } return 0; }