您的位置:首页 > 其它

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

2014-08-05 20:30 337 查看
传送门: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