问题描述
所有在东部地区的建筑物,从西到东排成一排中间没有间距。它们共同形成了多个高度的建筑物链。
市长决定希望用尽量少的矩形海报将整个建筑物表面覆盖。海报是垂直和水平矩形,它们不能重叠,每一张海报要完全相邻建筑物的墙壁。
任务
写一个程序:
从文件读取建筑物的描述,
决定所需要的完全覆盖其整个建筑物海报最少张数,结果输出文件。
输入格式
第一行包含一个整数n(1n250,000)表示建筑物的数目。
在接下来的n行,每行包含两个整数di和wi (1di,wi1,000,000,000)。表示第i栋建筑物的长与宽。
输出格式
一行包含一个数,表示足以覆盖整个建筑物最少数量的矩形海报数。
输入输出样例
pla.in
5
12
13
22
25
14
pla.out
4
思路:
两个建筑物的高度一样,就可以少用一张海报,最后输出建筑物的数量减去少用的海报数就可以了
程序:
#include
#include
#include
#include
#include
using namespace std;
ifstream cin("pla.in");
ofstream cout("pla.out");
int n,m,i,t,ans,a[250005],st[250005],b[250005];
int main()
{
cin>>n;
for (i=1;i<=n;i++) cin>>a[i]>>b[i];
t=0;
ans=0;
for (i=1;i<=n;i++)
{
while(b[i]<=st[t])
{
if(b[i]==st[t]) ans++;
t--;
}
t++;
st[t]=b[i];
}
cout<