题意:求柱状图中最大矩形面积。
单调栈:顾名思义就是栈内元素单调递增的栈。每次插入数据来维护这个栈,如果当前需要插入的数据小于栈顶的元素,那就一直弹出栈顶的元素,直到满足当前需要插入的元素大于栈顶元素为止。可以容易求出某个数左边或右边,第一个大于或小于它的数,且复杂度是O(n)O(n)。
思路:容易先想到一个好的枚举方式:以当前柱状为扩展点,往左边和右边扩展,当遇到一个比当前柱状小的柱状时停止扩展,...
分类:
其他好文 时间:
2015-07-20 13:03:53
阅读次数:
100
题意:
给出N幢摩天大楼的位置和高度,有Q次查询,问在某点处能看见天空的角度范围。
分析:
一开始的想法是维护一个单调栈,首先离线数据并排序排序,然后左右扫两边。单调栈内大楼的高度要递减,然后判断栈顶元素是否比它的前一个更优,如果不是则出栈。但是如果栈顶元素比它前一个优,并不能保证是全局最优的。
正确的维护方法是保证单调栈内的大楼高度递减,而且要使得这些大楼的最高点构成一个类似凸包的形状,或者说是凸包的一部分,然后再判断栈顶元素和它前一个比是否更优,如果不是则出栈。这样最后的栈顶元素就是待查询点在某方向的视...
分类:
其他好文 时间:
2014-09-21 23:18:21
阅读次数:
307