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

两种做法~ RMQ/单调栈~

bzoj1113【poi2008】海报PLA

单调栈

bzoj 1113 & bzoj 1683 &bzoj 1628 单调栈【经典】

题意:n个矩形排成一排,求用最少的矩形海报cover它们 显然最多n个,即一个矩形用一个 考虑减少所用海报 对于两个高度相等的矩形,当用同一张海报覆盖的时候,它们之间所有的矩形的高度都不低于它们的高度...

Learning Materials S1113

  • 2013年03月12日 00:06
  • 30.32MB
  • 下载

BZOJ题目镜像

  • 2014年09月14日 12:18
  • 15.01MB
  • 下载

poj 2528 Mayor's posters(线段树 离散化 区间更新 贴海报)

这个题目本来对大神来说可能是水题, 对我就不行了,昨晚非折腾到下半夜一点 搞定, 并且可以总结出 ,只有把问题想清楚,或着看人家解题报告自己把问题和代码思路 搞清楚,才能谈的上调bug,否则根本就不...
  • lsgqjh
  • lsgqjh
  • 2015年08月10日 13:02
  • 962

java学习资料_1113

  • 2016年11月13日 22:25
  • 37.48MB
  • 下载

BCTF_海报探秘(300)

这个题目来自上周的BCTF比赛,题目是海报探秘(300),一张png图片中隐藏了KEY,解出KEY,具体报告,请下载:http://download.csdn.net/detail/l0g1n/704...
  • l0g1n
  • l0g1n
  • 2014年03月14日 23:38
  • 1598
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BZOJ1113 海报PLA
举报原因:
原因补充:

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