Skip to main content

倍增

参考资料

简介

倍增(Binary Lifting)的核心思想是:预处理以 22 的整次幂为步长的状态,然后将任意目标分解为若干 22 的幂次之和,逐段合并得到答案。这利用了「任意非负整数均可用二进制表示」这一性质。

预处理阶段,设 f(i,x)f(i,x) 表示从状态 xx2i2^i 步后的结果,则递推关系为:

f(i,x)=f(i1,f(i1,x))f(i,x)=f(i-1,f(i-1,x))

预处理复杂度为 O(nlogn)O(n\log n),每次查询 O(logn)O(\log n)

应用

详见 ST 表

详见 最近公共祖先(LCA)

例题

给定一个长度为 NN 的数列,和 MM 次询问,求出每一次询问的区间内数字的最大值。

给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。