C
FenwickTree
v0.0.11testedFenwick (Binary Indexed) tree over an array of non-negative
numbers: O(log n) prefix sums, point updates, and monotonic lower-bound
search, plus O(n) bulk rebuild. lowerBound assumes all values are
non-negative (the prefix function must be non-decreasing)
Example
ts
const tree = new FenwickTree(5);
tree.build([10, 20, 30, 40, 50]);
tree.prefix(3); // 60
tree.update(1, 5); // value at index 1 becomes 25
tree.lowerBound(65); // 3 — largest c with prefix(c) <= 65Signature
ts
class FenwickTreeProperties
| Property | Type | Description |
|---|---|---|
sizereadonly | number | — |
Methods
buildBulk (re)initialization from raw values, O(n)
ts
build(values: ArrayLike<number>): void| Parameter | Type | Description |
|---|---|---|
values | ArrayLike<number> | The values to load, values.length must equal size |
updateAdd delta to the value at index, O(log n)
ts
update(index: number, delta: number): void| Parameter | Type | Description |
|---|---|---|
index | number | Zero-based index of the value to change |
delta | number | Amount to add (may be negative) |
prefixSum of the first count values, O(log n)
ts
prefix(count: number): number| Parameter | Type | Description |
|---|---|---|
count | number | How many leading values to sum |
Returns
numberThe prefix sumlowerBoundLargest c in [0, size] with prefix(c) + c * stride <= target, O(log n).
stride models a constant per-item addition (e.g. a layout gap) without
storing it in the tree
ts
lowerBound(target: number, stride = 0): number| Parameter | Type | Description |
|---|---|---|
target | number | The offset to search for |
stride? | number | Constant added per item, defaults to 0 |
Returns
numberThe largest count whose strided prefix does not exceed target