单调队列-洛谷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;
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号