题目大意:N个矩形,排成一排. 用尽量少的矩形海报Cover住它们
题解:首先观察到,答案上界为n,矩形的宽度是没有用的
从左到右遍历,对于一个矩形,若其左边有和它高度相同的,且中间没有更低的,就可以用一张海报覆盖它们之间的部分,用单调栈(单调不下降)维护即可
我的收获:……
#include <iostream>
#include <cstdio>
using namespace std;
int n,top,s[250005];
void init()
{
cin>>n;
int x,l,ans=n;
for(int i=1;i<=n;i++){
scanf("%d%d",&x,&l);
while(top&&s[top]>l) top--;
s[++top]=l;
if(s[top]==s[top-1]) ans--;
}
cout<<ans<<endl;
}
int main()
{
init();
return 0;
}