0

Segment Tree / Fenwick

A tree over ranges where each node stores an aggregate, giving logarithmic queries and updates.

AdvancedO(log n) per query and updateNew5 problems
18
mastery

Trigger phrases

If a problem statement sounds like one of these, try this pattern first.

range query with updates
count of smaller numbers after self
range minimum

The template

Get this into muscle memory, then adapt the condition per problem.

function update(node: number, l: number, r: number, i: number, v: number) {
  if (l === r) { tree[node] = v; return; }
  const m = (l + r) >> 1;
  i <= m ? update(2*node, l, m, i, v) : update(2*node+1, m+1, r, i, v);
  tree[node] = tree[2*node] + tree[2*node+1];
}

If you are stuck

The generic hint ladder for this pattern, in order.

  1. 1Prefix sums break when values change.
  2. 2Store aggregates over ranges in a tree so updates touch only one path.
  3. 3Fenwick is shorter to write when you only need prefix aggregates.

Drill it

Every problem in the bank that uses this pattern.

0 / 5 solved
1
2
3
4
5