include [HTML_REMOVED]
using namespace std;
const int N=1000010;
int a[N],q[N];
//a[N]用于存放数值
//q[N]是来存放数组被单调队列所需要的数的下标,是单调队列的头尾结点在原数组的位置
int main()
{
int n;//数组的长度
scanf(“%d”,&n);
int k;//滑动窗口的长度
scanf(“%d”,&k);
for(int i=0;i[HTML_REMOVED]9 那么这个时候的队列会由下一步的更新操作变成【5 9 11】
//上一次窗口【7 5 9】 此次窗口【5 9 11】 单调队列【5 9】 这次需要插入4 4<9 tt=tt-1 4<5 tt=tt-1 单调队列【 】 那么这个时候的队列会由下一步的更新操作变成【4】
q[++tt]=i;//更新队尾
if(i>k-1) printf(“%d “,a[q[hh]]);//前两次循环的窗口并没有建立成功,所以输出有条件限制
//每次窗口的数值都会被单调递增排列在单调队列中,所以只需要输出单调队列的队头的元素就可以了,但是我们只是记录了其元素对应的数组的下标,所以注意是a[q[hh]]
//这里的单调递增可不是所有元素都参与的排序,而是我们需要的
//举个例子【8 11 10】 那么单调队列是【8 10】 而不是【8 10 11】 11是永远不会有出头的那天的,【? 8 11】 【8 11 10】【11 10 ?】显而易见喽
}
}