±1RMQ(约束RMQ)
来源:互联网 发布:淘宝店铺logo分辨率 编辑:程序博客网 时间:2024/06/05 06:16
±1RMQ其实是RMQ的一个特殊情况,它的特殊性体现在:序列中每两个相邻元素的差是1或-1。即:
对于这种特殊情况,有一种方法可以将RMQ的时间降至常数级别,即用的时间解决。
可以发现,如果LCA用DFS+RMQ的方法解决,则RMQ部分正好是±1RMQ。所以,如果会了这种方法,将可以用的时间处理LCA的在线询问。
这里简单(因为我不会)介绍一下:RMQ标准算法:可以将原数列通过的时间建立成笛卡尔树,再转换成LCA,然后再用±1RMQ处理,则普通RMQ的时间复杂度也可以是。。。(好神奇)
回到正题。。。那么,±1RMQ该怎么做呢?
考虑分块,是否可以将序列分成b块,每一块都搞一次RMQ,然后大的也搞一次RMQ?
如图所示:
很明显,这样做是可以的。
则查询操作可分为三块,最左,最右边的块搞一次内部查询。然后中间所有块中再做一次块与块之间的查询操作。最后合并到一起即可。
如图:
分块的思路确定了。那么每个块的长度我们该如何确定呢?
是否可以将每块的长度len定为?如果这样就没有利用好+1,-1这个条件了。
在这里,我们设。则块数。
注意到相邻的两个数只有+1,-1两个条件。根据乘法原理,最多只有种本质不同的情况。
那么,我们可以先预处理出所有本质不同的情况的所有答案,即每一种本质不同情况都做一次RMQ。易知,这样做的时间复杂度不超过常数级别。
做完RMQ预处理后,就可以根据每一块+1/-1的性质套进上面的情况中,加上偏移量offset即可。
记第i块的最小值为A'[i],然后根据序列A'做一次块间的RMQ即可。
则预处理的时间复杂度为。每次查询的时间复杂度为。
阅读全文
0 0
- ±1RMQ(约束RMQ)
- 约束RMQ(±1RMQ算法)(复杂度O(n))
- RMQ
- RMQ
- RMQ
- RMQ
- RMQ
- RMQ
- RMQ
- RMQ
- RMQ
- rmq
- RMQ
- RMQ
- RMQ
- RMQ
- RMQ
- RMQ
- JAVA中double格式化控制精度小数位数,float同理
- 编译cmake 2.8.10.2报错:undefined reference to symbol 'keypad'
- webpack的基本使用(一)
- CC2640R2F BLE5.0 下载运行第一个程序(simple_peripheral)
- 责任链模式
- ±1RMQ(约束RMQ)
- 共享 load事件--addLoadEvent
- ArcGIS for Android 离线数据空间分析--叠加分析
- springboot【8】数据访问之JdbcTemplate访问数据库
- Mabatis学习所碰到的问题(1)
- 使用Eclipse的maven构建一个web项目
- 【Tomcat】-- 小程序开发 tomcat 申请阿里云HTTPS配置
- echarts-2.2.7柱状图隐藏y轴和x轴
- CodeForces