单调队列 模板
#include<cstdio> using namespace std; long long a[1000010]; int n,k; struct node { long long w,num; }q[1000010]; void search_min() { int end=0,head=1; for(int i=1;i<=n;i++) { while(head<=end&&a[i]<=q[end].w) end--; q[++end].w=a[i];q[end].num=i; while(i-q[head].num>=k) head++; if(i>=k) printf("%lld ",q[head].w); } } void search_max() { int end=0,head=1; for(int i=1;i<=n;i++) { while(head<=end&&a[i]>=q[end].w) end--; q[++end].w=a[i];q[end].num=i; while(i-q[head].num>=k) head++; if(i>=k) printf("%lld ",q[head].w); } } int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); search_min(); printf("\n"); search_max(); return 0; }