声明
本文资料参考acwing算法基础课
 地址:https://www.acwing.com
概述
- 解决问题:求一个滑动窗口中满足某条件的值
 - 使用一个数组a存储原数组,一个数组q存储窗口队列中有用的下标
 - 保证:窗口中新进入一个元素就可以排除掉没有用的元素
 - 保证:队列中下标的范围在窗口内
 
模板记忆
这个模板分为三个部分:
- 保窗口:移动队头,保证窗口大小
 - 删元素:移动队尾删除被新元素筛掉的元素
 - 插元素:插入新元素
 
模板代码
int a[N], q[N];  // a是原数组,q是队列(存储下标)
int l = 0, r = 0;  // 初始化队列
// 最小值窗口
for (int i = 0; i < n; i ++ )
{
    if (l < r && q[l] <= i - k) l ++ ;  // 窗口移动时,保证队列的下标都在窗口中
    while (l < r && a[q[r - 1]] >= a[i]) r -- ;  // 新元素的到来删掉一些没用的元素
    q[r ++ ] = i;  // 插入新元素
    if (i >= k - 1) cout << a[q[l]] << ' ';  // 输出所查
}
cout << endl;









