题目
1113: [Poi2008]海报PLA
Time Limit: 10 Sec Memory Limit: 162 MBDescription
N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们.
Input
第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值在[1,1000000000]2 1/2 Postering
Output
最少数量的海报数.
Sample Input
5
1 2
1 3
2 2
2 5
1 4
1 2
1 3
2 2
2 5
1 4
Sample Output
4
题解
这道题目,我们可以像一旦出现高度一样的就可以用同一张海报盖掉,但是两张海报之中的海报就只能单独再贴了。基于这个思路,我们可以写一个单调栈。
代码
1 /*Author:WNJXYK*/ 2 #include<cstdio> 3 using namespace std; 4 int t,x,n,s[250001],top,ans; 5 int main(){ 6 scanf("%d",&n); 7 for(int i=1;i<=n;i++){ 8 scanf("%d%d",&t,&x); 9 while(x<=s[top]){ 10 if(x==s[top])ans++; 11 top--; 12 } 13 s[++top]=x; 14 } 15 printf("%d",n-ans); 16 return 0; 17 }