Практикуйте дискретную математику

Algorithms / Binary Lifting

Least You Need to Know: Binary Lifting, Power-of-Two Jumps, and Ancestor Queries

Binary lifting preprocesses jump pointers so ancestor movement can be decomposed into **powers of two**. The main trick is the same as binary representation: any jump length can be written as a sum of power-of-two jumps.

The least you need to know

Key notation

up[v][j] the `2^j`-th ancestor of node `v`
k number of levels to climb
set bit a power of two present in the binary expansion of `k`

Tiny worked example

  • If `k = 13`, write `13 = 8 + 4 + 1`.
  • From node `v`, jump to the `2^3`-ancestor, then the `2^2`-ancestor of that node, then the `2^0`-ancestor.
  • Only three table lookups are needed instead of climbing one edge at a time.
  • The same idea helps equalize depths before finishing an LCA query.

Common mistakes

How to recognize this kind of problem

Start practice