update method

void update(
  1. int index,
  2. num delta
)

Adds delta to the element at index (0-based), in O(log n). Requires 0 <= index < length.

Example:

final FenwickTree t = FenwickTree(5);
t.update(2, 7); // element 2 becomes 7
t.prefixSum(2); // 7

Audited: 2026-06-12 11:26 EDT

Implementation

void update(int index, num delta) {
  // Must throw in release, not assert: a negative index makes `i & -i == 0`,
  // so `i += 0` below would loop forever — a production hang, not a no-op.
  if (index < 0 || index >= _size) {
    throw RangeError('index ($index) out of range [0, $_size)');
  }
  // Walk to each responsible node by adding the lowest set bit (i & -i).
  for (int i = index + 1; i <= _size; i += i & -i) {
    _tree[i] += delta;
  }
}