![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RMQ
hexianhao
这个作者很懒,什么都没留下…
展开
-
poj 2452(RMQ+二分)
解题思路:这题实际上就是求某区间上的最值问题,可以先枚举区间的起始位置,然后二分去搜索比起始位置大的数且位置最远(这里可以用RMQ算法区间内的最小值),找到之后再利用RMQ算法找这段区间内的最大的,如果这段区间的长度比当前的最优值大,那么更新。详细的见代码。 #include #include #include #include using namespace std; con原创 2016-03-31 17:20:05 · 340 阅读 · 0 评论 -
poj 2201(RMQ+笛卡尔树)
给出一些结点 每个节点有两个关键字 要求构造一棵树 第一个关键字满足二叉搜索树的性质,第二个关键字满足小堆的性质 解题思路:这道题我开始是用第二关键字从小到大排序,然后从1-n去添加节点。这样是符合最小堆的性质,假设添加第i个节点,那么首先去找[1,i-1]这段区间的第一关键字的最小值和最大值,如果i节点的第一关键字大于最大值,就直接添加到最大值节点的右儿子,如原创 2016-04-01 10:26:02 · 526 阅读 · 0 评论 -
hdu 3486(RMQ+高效枚举)
题意:把n分为 均分为m 段 每段n/m个数字 每段可以选一个最大的数 求这些数相加起来>k的最小的m 解题思路:这道题本来想用二分+rmq的,但discuss里面说二分是错的,所以只能另想别的办法了。 首先是可以肯定的,一定要枚举段数,接下来就是如何减少对内层循环的枚举次数。 当分成i段得到的段长L1 与 之前分成 i-1段得到的段长相同 那就只要把前一次的结果再加上这一次 第i段原创 2016-05-05 20:04:58 · 442 阅读 · 0 评论 -
hdu 5172(RMQ+前缀和)
题意:判断一个区间[l,r]的数是否是1到(r-l+1)。 解题思路:首先判断该区间内的和是否是n*(1+n)/2,这里可以用前缀和判断。 接下来是要判断该区间内无重复的数: pos[i]表示第i个数左边与它相同的且最靠近它的位置。如果寻找的[l,r]区间内最大的pos[i]大于了l,说明区间有重复的数。这里可以用rmq维护,但rmq超内存。正解是线段树。 #include #in原创 2016-05-06 20:20:14 · 483 阅读 · 0 评论 -
hdu 5247(RMQ+枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5247 解题思路:这道题要求区间的连续性,可以用RMQ解决。首先可以确定的是如果区间的和必须是满足等差数列的求和,否则不会是连续的数。其次还要判断这个区间内的每一个数往左走遇到第一个与它相等的位置。如果该位置在区间内,说明区间内有重复的数。这里可以用RMQ维护。 #include #include原创 2016-05-19 17:31:30 · 345 阅读 · 0 评论