BZOJ 1113: [Poi2008]海报PLA 单调栈

来源:互联网 发布:北京酒店推荐 知乎 编辑:程序博客网 时间:2024/05/22 16:39

Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1153 Solved: 785

Description

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

这里写图片描述

Sample Output

4

这里写图片描述

HINT

Source


貌似就是单调栈扫扫就没了233
维护单调栈,只要是两个矩形,他们的高度一样,中间的都比他们高,那么就可以让答案减1,初始答案是n,因为最多覆盖n次,这道题的题目没有给清楚,可能是翻译的原因,这道题要去精确覆盖,所以我们只需要考虑刚才所说的情况,重复一遍,两个矩形的高度相同,中间的都比他们高,那么横着放一块就可以让答案减1,结论显然

#include<cstdio>using namespace std;int n,final,x,y,stk[250000+10],top;int main(){    scanf("%d",&n);    final=n;    scanf("%d%d",&x,&y);stk[++top]=y;    for(register int i=2;i<=n;i++){        scanf("%d%d",&x,&y);        while(top&&stk[top]>y)top--;        if(stk[top]==y) final--;        stk[++top]=y;    }    printf("%d\n",final);    return 0;}

这里写图片描述

原创粉丝点击