滑动窗口 单调队列
题目: 传送门 很明显,用单调队列 code: 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,k,Fmax[1000010],num[1000010],q[1000010],Fmin[1000010]; 4 int a[1000010]; 5 int head,tail; 6 void dmin() 7 { 8 head=1; 9 tail=0; 10 for(int i=1;i<=n;i++) 11 { 12 while(num[head]<i-k+1&&head<=tail)head++; 13 while(a[i]<q[tail]&&head<=tail)tail--; 14 num[++tail]=i; 15 q[tail]=a[i]; 16 Fmin[i]=q[head]; 17 } 18 } 19 void dmax() 20 { 21 head=1; 22 tail=0; 23 for(int i=1;i<=n;i++) 24 { 25 while(num[head]<i-k+1&&head<=tail)head++; 26 while(a[i]>q[tail]&&head<=tail)tail--; 27 num[++tail]=i; 28 q[tail]=a[i]; 29 Fmax[i]=q