【解题报告】洛谷P3467 PLA-Postering

【解题报告】洛谷P3467 PLA-Postering

题目链接

https://www.luogu.com.cn/problem/P3467

思路

这道题目我开始理解错了

我理解的是从侧边看过去,也就是建筑物东西延伸,我从东西看,然后我想的是从左边单调栈一次,右边单调栈一次

但是题目的意思是从南北看过去,然后贴海报

啊喂,有房子把海报直接贴在家门口的吗草

所以我们直接用一个单调栈维护一下就好了,我们维护一个单调递减的单调栈,特别地,如果两个相邻的高度一样的话,我们所需要的海报数量减一,因为两个建筑可以直接共用一张海报

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
const int maxn=250005;
int n,ans;
int d[maxn],w[maxn];
int s[maxn],size;
bool vis1[maxn];
bool vis2[maxn];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>d[i]>>w[i];
	
	for(int i=1;i<=n;i++)
	{
		while(size&&s[size]>=w[i])
		{
			if(w[i]==s[size]) ans++;;
			s[size]=0;
			size--;
		}
		s[++size]=w[i];
	}
	cout<<n-ans<<'
';
	return 0;
}
本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
原文地址:https://www.cnblogs.com/wweiyi2004/p/15399175.html