博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【洛谷3467/BZOJ1113】[POI2008]海报PLA-Postering(单调栈)
阅读量:4970 次
发布时间:2019-06-12

本文共 849 字,大约阅读时间需要 2 分钟。

题目:

分析:

(ti jie shuo)这题是个单调栈经典题。

单调栈就是栈元素递增或递减的栈,这里只考虑递增。新元素入递增栈时,先将所有比它大的元素弹出,然后让新元素入栈,这样保证栈顶永远是最大的元素,代码如下:(\(a\)是新元素)

while(top>0&&stack[top]>a)top--;      stack[++top]=a;

然后来分析这道题。我这种蒟蒻乍一看一脸懵逼,但是可以注意到这样一个事实:

如果先让每个楼都贴一张海报(\(ans=n\)),如果两栋高度相同的楼之间没有比它们矮的楼,这两座楼就可以用一张海报覆盖(\(ans\)--),而中间那些比它们高的楼仍然每个楼需要一张海报。如下图(然而如果两栋楼之间有一栋比它们低的楼就不可以,因为题目要求海报不能超出建筑物)

SouthEast
然后这个题就很简单了,对于每一座楼都把栈里比他高的弹出去,然后如果此时栈顶跟它一样,就说明两栋楼可以用一张海报。

(由于这座楼的限制,后面比它高的楼都不能和这座楼前面比它高的楼公用海报,所以要弹出)

代码:

#include
#include
using namespace std;int n,stack[250010],top,trash,ans;int main(void){ scanf("%d",&n); scanf("%d%d",&trash,&stack[0]); ans=n; for(int i=1;i
0&&stack[top]>a)top--; if(a==stack[top])ans--; else stack[++top]=a; } printf("%d",ans); return 0;}

转载于:https://www.cnblogs.com/zyt1253679098/p/8876811.html

你可能感兴趣的文章
wordpress-技术博客主题推荐
查看>>
SharePoint 2010 PowerShell 系列 之 准备工作
查看>>
分布式系统ID生成办法
查看>>
OpenCL
查看>>
iphone ios XCode4如何调试程序忽然崩溃而找不到挂的代码
查看>>
MD5加密文件
查看>>
QT中QPainterPath类的功能和使用方法
查看>>
通过ftp模拟网盘
查看>>
ruby 状态转移
查看>>
在ireport中使用checkbox
查看>>
网站架构之可扩展性
查看>>
content.boundingRectWithSize计算出来的高度不准
查看>>
看过了觉得蛮有用的博客链接
查看>>
C# 注册表Regedit读写
查看>>
cinnamon桌面安装在其他目录下
查看>>
yml在线格式转换工具(properties)
查看>>
题解 【luoguP1967 NOIp提高组2013 货车运输】
查看>>
【Linux开发】CCS远程调试ARM,AM4378
查看>>
Scala的类和对象
查看>>
table相关的选择器 & children()与find()的区别 & 选择器eq(n)与nth-child(n)的差异
查看>>