【解题报告】洛谷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;
}