RMQ的原理
来源:互联网 发布:php ajax上传 编辑:程序博客网 时间:2024/06/11 02:27
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。
以上内容出自某百科,大体是RMQ的理性认识。说白了,RMQ就是一种查询区间最值的good way
其实用O(n)的效率查找也不是不可以,但当区间长度较长,讯问次数又较多时,就会猥琐了
但是RMQ只是用(n log n)的效率预处理后,查询时只需O(1)的效率就可以了
那么怎么与处理呢?
我们用f[i][j]表示第i个点往后2^j个范围之中的最值。所以f[i][j]就可以表示为f[i][j]=min或max(f[f[i][j-1]][j-1],f[i][j-1])。
那么有了f数组,该如何查询呢?
其中有一个关键点就是,如果两段范围重合了的话,那这两段范围加起来的范围之中的最值就是这两段之中最值相对更大(或更小)的那个。比如我们要求[l,r]之间的最值,那么我们选一个以l开头的范围和一个以r结束的范围,于是就有了max或min(f[i][k],f[l-2^k+1][k])。
一段核心代码,是gty大神的代码图片,需要说明的是其中”1<< j“表示的是2^j,思路有了就很好写了,还是自己写写吧
1 0
- RMQ的原理
- RMQ 原理
- 理解RMQ问题和ST算法的原理
- HDU3183(RMQ+鸽巢原理)
- 简单的RMQ(RMQ+ST NEUQ“图灵杯”)
- RMQ的ST算法
- RMQ的ST算法
- RMQ的问题
- ZOJ2859-----二维的RMQ
- RMQ算法的介绍
- RMQ的ST算法
- 对RMQ的理解
- LCA的RMQ求法
- 基于RMQ的LCA
- RMQ
- RMQ
- RMQ
- RMQ
- 在springMVC中 获取request、response、session
- 浅谈数据库中的存储过程
- PCA(Principal Component Analysis)的原理、算法步骤和实现。
- 链表反转
- poj 2393
- RMQ的原理
- java中实现多线程的方式
- 快速排序
- <转>MySQL事务隔离级别详解
- 链表合并(递归)
- 【模板】网络流——Dinic
- servlet容器,web服务器的区别与联系
- Java编程:垃圾收集算法
- 初识自定义view<一>