update method
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;
}
}