P1440 求m区间内的最小值
单调队列裸题
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=2e6+10; 4 int n,m,a[maxn]; 5 int que[maxn]; 6 int main() 7 { 8 scanf("%d%d",&n,&m); 9 for(int i=1;i<=n;i++) 10 scanf("%d",&a[i]); 11 int left=1,right=0; 12 for(int i=1;i<=n;i++){ 13 printf("%d\n",a[que[left]]);//输出队首 14 if(i-que[left]+1>m&&left<=right) left++;//查看队首是否在区间内,不在的话出队列 15 while(a[i]<a[que[right]]&&left<=right) right--;//进队比较,把比它大的都踢出去 16 que[++right]=i; 17 } 18 return 0; 19 }