RMQ & LCA

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://iuaaui.blogbus.com/logs/5241135.html

好不容易找到一篇GHY的论文(WC2007),看过之后稍有些明白。
RMQ是给定一列数,动态询问[i,j]区间内的最小(或最大值)。
LCA是给定一棵树,动态询问u和v的最近公共祖先。

解决这两种问题都有个很重要的倍增思想(这个思想在后缀数组方面亦有所应用)。
关键需要记住的是
在LCA预处理的时候
p[i,j] 表示i的2^j 倍祖先
那么就有一个递推式子  p[i,j]=p[p[i,j-1],j-1]

RMQ和LCA可以相互转化。。   所以只要记住一种就行了。。 

RMQ转LCA的时候是生成一棵类似于堆的递归树;LCA转RMQ的时候用到的是深度优先遍历

主要掌握的不在于算法,而是在于倍增思想

你可能感兴趣的:(MQ)