Segment Tree

T: O(n) build, O(log n) query/update
Feedback

Segment Tree

Build: node 1 covers [0, 7] (combine left + right)
37[0,7]12[0,3]7[0,1]2[0,0]5[1,1]5[2,3]1[2,2]4[3,3]25[4,7]12[4,5]9[4,4]3[5,5]13[6,7]7[6,6]6[7,7]
2
5
1
4
9
3
7
6
Query range: [1, 5]
SpeedNormal (500ms)
Parameters

{ array: number[], queryRange: [number, number] }

Variables
phasebuild
n8
queryRange[1, 5]
node1
[start,end][0,7]
tree[node]37
1BUILD: fill tree so each node = sum of its range
2function build(node, start, end):
3 if start == end: # leaf: single element
4 tree[node] = arr[start]
5 return
6 mid = (start + end) / 2 # split range
7 build(2*node, start, mid)
8 build(2*node+1, mid+1, end)
9 tree[node] = tree[2*node] + tree[2*node+1]
10
11QUERY: get sum of array [l..r]
12function query(node, start, end, l, r):
13 if l <= start and end <= r: # node inside query
14 return tree[node]
15 if end < l or start > r: # no overlap
16 return 0
17 mid = (start + end) / 2
18 return query(left,l,r) + query(right,l,r)
Output
Build: node 1 covers [0, 7] (combine left + right)