移动窗口.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; }
浙公网安备 33010602011771号