区间M的最小值 主要是是以题目的形式进行讲解题目如上说说一开始的思路当看到输出最小值内心想到的是小根堆然后说区间内这个区间是滑动的那可以想到滑动窗口总的来说滑动窗口 递增序列 - 单调递增队列注意队列中存放的是下标目的是为了维护前m个数意思就是这个区间内的数属于【i-mi-1】当下标小于i-m时即说明这个数不属于这个区间需要移除队列那滑动窗口讲完了该如何实现递增序列嘿嘿嘿手动实现嘛保证队首最小,加入的数也要比队尾小先删除队尾 再加入新的小的数。同时给大家说明一下我们实现这个题目时需要注意先删除不应该在区间的值再输出最小的值最后加入新的值。总结一下注意点1.deque存的是下标2.实现时注意先使区间都是有效值删掉不符合条件的3.注意删的是队首还是队尾加的是队首还是队尾4.加入值时判断与队尾的大小比他大就不加了比他小时注意先删再加**代码如下注意看注释12345678910111213141516171819202122232425262728293031323334353637383940#includebits/stdc.husing namespace std;constintN 2e65;inta[N];intmain(){intn,m;cinnm;for(inti1;in;i){cina[i];}dequeintq;for(inti1;in;i){//先删不符合条件的while(!q.empty() q.front()i-m){q.pop_front();//这里是删队首因为不属于区间内}//输出区间内的最小值 即队首if(q.empty()){cout0\n;}else{couta[q.front()]\n;//注意deque内存的是下标输出时记得用a[]输出}//右移窗口同时维护递增序列while(!q.empty() a[q.back()]a[i]){q.pop_back();//这里要先删除再加否则加了再删会误删a[i]删掉大的主要是维护递增序列}q.push_back(i);//将小的放入队尾}return0;}