码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj 1113 海报pla

时间:2017-05-27 19:59:49      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:over   return   判断   images   namespace   std   img   矩形   can   

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

技术分享

技术分享

【解析】

单调增栈。

显然贴海报只与矩形的高有关。发现当两个矩形高相同并且这两个矩形之间的矩形的高度都比他们大时可以用一张海报。

否则增加一张海报。

我们维护一个单调增栈,那么栈中的每一个元素左边的第一个元素就是第一个小于或者是等于当前元素的元素。判断是否相等,不相等就必须为当前

矩形增加一个海报。

【code】

#include<iostream>
#include<cstdio>
using namespace std;
#define N 250005
int n,top,ans,l,h;
int sta[N];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&l,&h);
        while(top&&sta[top]>h)top--;
        sta[++top]=h;
        if(sta[top-1]!=sta[top])ans++;
    }
    printf("%d",ans);
    return 0;
}

 

bzoj 1113 海报pla

标签:over   return   判断   images   namespace   std   img   矩形   can   

原文地址:http://www.cnblogs.com/zzyh/p/6852569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!