Skip to content

Commit 5ef1530

Browse files
authored
Update segment_tree.cpp
1 parent d83a3ab commit 5ef1530

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

segment_tree.cpp

+9-11
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,20 @@ void init(int node, int b, int e) {
4545
}
4646

4747
int query(int node, int b, int e, int i, int j) {
48-
if (b > j || e < i) return 0;
49-
if (b >= i && e <= j) return tree[node];
48+
if (i > j) return 0;
49+
if (i == b && j == e) return tree[node];
5050
int left = node << 1, right = left | 1, mid = (b+e) >> 1;
51-
return query(left, b, mid, i, j) + query(right, mid+1, e, i, j);
51+
return query(left, b, mid, i, min(mid, j)) + query(right, mid+1, e, max(mid+1, i), j);
5252
}
5353

5454
void update(int node, int b, int e, int i, int val) {
55-
if (b > i || e < i) return;
56-
if (b >= i && e <= i) {
57-
tree[node] = val;
58-
return;
55+
if (b == e) tree[node] = val;
56+
else {
57+
int left = node << 1, right = left | 1, mid = (b+e) >> 1;
58+
if (i <= mid) update(left, b, mid, i, val);
59+
else update(right, mid+1, e, i, val);
60+
tree[node] = tree[left] + tree[right];
5961
}
60-
int left = node << 1, right = left | 1, mid = (b+e) >> 1;
61-
update(left, b, mid, i, val);
62-
update(right, mid+1, e, i, val);
63-
tree[node] = tree[left] + tree[right];
6462
}
6563

6664
int main() {

0 commit comments

Comments
 (0)