RMQ算法
aozil_yang
这个作者很懒,什么都没留下…
展开
-
UVA - 11235 Frequent values 频繁出现的数值(RMQ)
大体题意: 给你n 个元素的非降序排列的数组,给你m 个询问i,j,求出 区间[i,j]内出现次数最多数的次数! 思路: RMQ算法是求某个区间内的最小值或最大值! 这个问题关键是转换到RMQ问题上去! 因为数组呈非降序,所以所有相等的元素会聚在一起! 所以可以把数组分成一块一块的, val[i]表示第i块 数值是多少,cot[i]表示第i块出现了多少次! num[p]表示数组位置p原创 2016-07-10 13:18:06 · 574 阅读 · 0 评论 -
POJ 2452 Sticks Problem (RMQ + 预处理)
大体题意: 给你n 个数,要求选择一个区间l,r 使得 l~r 之间的数a[i] 满足 a[l] 思路: rmq+预处理! 我们可以枚举区间的左端点l,我们需要找到左端点l 的右方第一个小于等于a[l]的位置k,然后我们求出 l ~ k-1区间内的最大值a[pos],如果最大值大于a[l],那么 pos - l 就是答案之一,更新一下最大值即可! 那么问题来了: rmq求的是 区原创 2016-10-19 18:05:15 · 457 阅读 · 0 评论 -
POJ 2559 Largest Rectangle in a Histogram(RMQ+二分)
题意: 给你n 个宽度为1 高度不同的矩形,要求求最大的矩形面积, 高度低的可以向挨着的高度高的扩展。 思路: 很多都是单调栈,dp之类的。 给大家 提供另一个思路: 枚举矩形中心,二分右边最远能到哪,二分左边最远能到哪,更新最大值即可。 一个区间合不合适,只要这个区间的最小值是否等于中心的高度即可。可以用RMQ处理。 #include #include #include #原创 2017-03-15 00:23:31 · 475 阅读 · 0 评论