【BZOJ】【P1113】【Poi2008】【海报PLA】【题解】【单调队列】

传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1113

很久以前就看过这道题,觉得好神啊……不会……后来不知从哪看到有一个结论:

从上往下每次覆盖多出来的一块是最优的(不知道怎么证明的),于是想:每次最大值?线段树??不太对……又卡了几天……

忽然有了灵感:每个矩形用一个海报覆盖,最多n个就可以了,如果有连着两个相同的用一个合并,嗯,还是不太对……中间如果有高的话可以先消中间的,那就单调队列吧~

Code:

#include<bits/stdc++.h>
using namespace std;
stack<int>s;
int n,x,y,ans; 
int main(){
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		scanf("%d%d",&x,&y);
		while(!s.empty()&&s.top()>=y){
			if(s.top()==y)ans++;
			s.pop();
		}s.push(y);
	}cout<<n-ans<<endl;
	return 0;	
}



你可能感兴趣的:(bzoj,省选)