倍增
Summary
倍增(Binary Lifting)预处理以 2 的整次幂为步长的状态,再把任意目标步数按二进制拆成若干 2 的幂之和,逐段跳跃合并出答案。设 f(i,x) 表示从状态 x 走 2 的 i 次方步后的结果,递推式为 f(i,x)=f(i-1,f(i-1,x)),预处理复杂度 O(nlogn),单次查询 O(logn)。这套思想是 ST 表与最近公共祖先 LCA 的基础,也用于求树上第 k 级祖先一类可倍增合并的问题。
参考资料
简介
倍增(Binary Lifting)的核心思想是:预处理以 的整次幂为步长的状态,然后将任意目标分解为若干 的幂次之和,逐段合并得到答案。这利用了「任意非负整数均可用二进制表示」这一性质。
预处理阶段,设 表示从状态 走 步后的结果,则递推关系为:
预处理复杂度为 ,每次查询 。
应用
详见 ST 表。
详见 最近公共祖先(LCA)。