@@ -45,22 +45,20 @@ void init(int node, int b, int e) {
45
45
}
46
46
47
47
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];
50
50
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);
52
52
}
53
53
54
54
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];
59
61
}
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];
64
62
}
65
63
66
64
int main () {
0 commit comments