【解题报告】洛谷P3467 PLA-Postering
题目链接
https://www.luogu.com.cn/problem/P3467
思路
这道题目我开始理解错了
我理解的是从侧边看过去,也就是建筑物东西延伸,我从东西看,然后我想的是从左边单调栈一次,右边单调栈一次
但是题目的意思是从南北看过去,然后贴海报
啊喂,有房子把海报直接贴在家门口的吗草
所以我们直接用一个单调栈维护一下就好了,我们维护一个单调递减的单调栈,特别地,如果两个相邻的高度一样的话,我们所需要的海报数量减一,因为两个建筑可以直接共用一张海报
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #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<<'\n'; return 0; }
|