单调队列-洛谷P1440 求m区间内的最小值
运用递增单调递增队列,原理同单调栈,只不过他可以更改区间的left和取到[left,right]的最值
#include <iostream>
#include <queue>
using namespace std;
int n,m;
const int MAXN = 2000000+1;
int height[MAXN];
inline void solve(){
deque<int> q;
for(int i=0;i<n;i++) {
while(!q.empty()&&height[q.back()]>height[i]) q.pop_back();
printf(i>0?"0\n":"%d\n",height[q.front()]);
q.push_back(i);
if(i-q.front()>=m) q.pop_front();
}
putchar('\n');
}
int main(){
cin >> n >> m;
for(int i=0;i<n;i++){
cin >> height[i];
}
solve();
return 0;
}