P3467 [POI2008]PLA-Postering

题面

Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长的,从东向西延伸的建筑物链(建筑物的高度不一).Byteburg市的市长Byteasar,决定将这个建筑物链的一侧用海报覆盖住.并且想用最少的海报数量,海报是矩形的.海报与海报之间不能重叠,但是可以相互挨着(即它们具有公共边),每一个海报都必须贴近墙并且建筑物链的整个一侧必须被覆盖(意思是:海报需要将一侧全部覆盖,并且不能超出建筑物链)

输入格式

第一行为一个整数n(1≤n≤250000),表示有n个建筑,接下来n行中,第i行表示第i个建筑物的宽di与高wi(1≤di,wi≤1 000 000 000),中间由一个空格隔开

输出格式

第一个为一个整数,表示最少需要几张海报.

说明/提示

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

感谢@__乱世魇华 提供翻译

思路

维护单调递增栈,然后直接如果栈顶不是这个元素就计数器++就好了。

代码

#include <bits/stdc++.h>
using namespace std;

int n,sta[250005];
int height[250005];
int result=0,top=0;

void push(int i){
	while(top>0 && height[i]<height[sta[top]]){
		top--;
	}
	if(height[sta[top]]!=height[i]){
		result++;
	}
	sta[++top]=i;
}

int main(){
	cin>>n;
	for(int i=1,width;i<=n;i++){
		cin>>width>>height[i];
		push(i);
	}
	cout<<result<<endl;
	return 0;
}

posted @ 2022-04-09 08:59  蒟蒻xiezheyuan  阅读(24)  评论(0编辑  收藏  举报