单调队列。。。
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; int a[maxn],ans2[maxn],q1[maxn],q2[maxn]; int main(){ int n,k; scanf("%d%d",&n,&k); int l1=1,r1=0,l2=1,r2=0; for(int i=1;i<=n;++i){ scanf("%d",&a[i]); while(l1<=r1&&i-q1[l1]>=k)l1++; while(l2<=r2&&i-q2[l2]>=k)l2++; while(l1<=r1&&a[q1[r1]]<=a[i])--r1; while(l2<=r2&&a[q2[r2]]>=a[i])--r2; q1[++r1]=i;q2[++r2]=i; ans2[i]=a[q1[l1]]; if(i>=k) printf("%d ",a[q2[l2]]); } printf("\n"); for(int i=k;i<=n;++i)printf("%d ",ans2[i]); return 0; }