单调队列-洛谷P1440 求m区间内的最小值

洛谷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;
}
posted @ 2019-07-26 19:25  zz2108828  阅读(166)  评论(0编辑  收藏  举报