BZOJ1113 海报PLA

原创 2016年06月01日 18:06:09

好像是很古老的题?现在BZOJ上找不到该题,所以没有提交。

1113: [Poi2008]海报PLA

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 810  Solved: 507
[Submit][Status][Discuss]

Description

N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们.

(SilverN附注:矩形外不能贴海报)

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




根据神秘提示 可以用单调栈来处理。

先假设每个矩形都用一张海报覆盖。从左到右遍历,对于一个矩形,如果左边有和它高度相等的矩形(且两个矩形之间没有更低的),那么可以用一大张海报覆盖这两个矩形和它们之间的部分(见上图),则总海报数-- 。

用单调栈维护“左边第一个比当前矩形低的矩形”,如果该矩形高度和当前矩形相同,那么总海报数--

代码如下:


#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int n;
int st[2000];
int t=0;
int ans;
int main(){
	scanf("%d",&n);
	ans=n;//最差情况需要n张海报 
	int i,j;
	int x,y;
	scanf("%d%d",&x,&y);//单独处理第一个矩形
	st[++t]=y;
	for(i=2;i<=n;i++){
		scanf("%d%d",&x,&y);
		while(t>0 && st[t]>y)t--;
		if(st[t]==y)ans--;
		st[++t]=y;
	}
	printf("%d\n",ans);
	return 0;

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

BZOJ 1113 [Poi2008]海报PLA 单调栈

BZOJ 1113 [Poi2008]海报PLA 单调栈
  • wzq_QwQ
  • wzq_QwQ
  • 2015年09月14日 20:19
  • 1114

bzoj1113【poi2008】海报PLA

单调栈
  • AaronGZK
  • AaronGZK
  • 2015年10月12日 23:23
  • 826

【单调栈】【bzoj1113】海报PLA

Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出...
  • sunshinezff
  • sunshinezff
  • 2015年05月20日 19:12
  • 801

BZOJ1113【单调栈】

/* I will wait for you */ #include #include #include #include #include #include #include #include #...
  • Lethelody
  • Lethelody
  • 2015年04月07日 20:41
  • 325

bzoj1113[Poi2008]海报PLA

Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形...
  • zhb1997
  • zhb1997
  • 2014年06月05日 13:19
  • 660

【bzoj1113】 [Poi2008]海报PLA

Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽...
  • Timothy023
  • Timothy023
  • 2017年07月22日 23:39
  • 68

bzoj1113: [Poi2008]海报PLA

单调栈
  • FSAHFGSADHSAKNDAS
  • FSAHFGSADHSAKNDAS
  • 2017年04月06日 11:23
  • 147

【Poi2008】【BZOJ1113】海报PLA

DescriptionN个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们.Input第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值在[1...
  • CreationAugust
  • CreationAugust
  • 2015年11月17日 19:00
  • 715

bzoj1113 [Poi2008]海报PLA

题目首先,答案的上界显然就为n。之后考虑如何减少——如果两张海报高度相同,之间的海报都比它高,答案就减少一。单调队列就可以了。#include #define N 250000 using names...
  • wanherun
  • wanherun
  • 2017年09月26日 10:51
  • 83

【bzoj1113】[Poi2008]海报PLA

#include #include #include using namespace std; int n,a,ans; stack s; inline int read(){ int x=0...
  • ndsffx501ccy
  • ndsffx501ccy
  • 2014年06月04日 19:57
  • 257
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BZOJ1113 海报PLA
举报原因:
原因补充:

(最多只允许输入30个字)