P1886 滑動視窗 /【模板】單調佇列
阿新 • • 發佈:2020-07-20
單調佇列裸題
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6+10; 4 int a[maxn]; 5 int qmin[maxn],qmax[maxn]; 6 int pmin[maxn],pmax[maxn]; 7 int n,k; 8 void solve_min() 9 { 10 int head=1; 11 int tail=0; 12 for(int i=1;i<=n;i++){ 13 while(head<=tail&&qmin[tail]>=a[i]){View Code14 tail--; 15 } 16 qmin[++tail]=a[i]; 17 pmin[tail]=i; 18 while(i-pmin[head]>=k) head++; 19 if(i>=k)printf("%d ",qmin[head]); 20 } 21 printf("\n"); 22 } 23 void solve_max() 24 { 25 int head=1; 26 int tail=0; 27 for(int i=1;i<=n;i++){28 while(head<=tail&&qmax[tail]<=a[i]){ 29 tail--; 30 } 31 qmax[++tail]=a[i]; 32 pmax[tail]=i; 33 while(i-pmax[head]>=k) head++; 34 if(i>=k)printf("%d ",qmax[head]); 35 } 36 printf("\n"); 37 } 38 int main() 39 { 40scanf("%d%d",&n,&k); 41 for(int i=1;i<=n;i++){ 42 scanf("%d",&a[i]); 43 } 44 solve_min(); 45 solve_max(); 46 }