@@ -35,46 +35,36 @@ void print(int a[], int b, int e) {
35
35
}
36
36
37
37
void init (int node, int b, int e) {
38
- if (b == e) {
39
- tree[node] = arr[b];
40
- return ;
41
- }
42
- int left = node << 1 ;
43
- int right = (node << 1 ) + 1 ;
44
- int mid = (b + e) >> 1 ;
45
- init (left, b, mid);
46
- init (right, mid + 1 , e);
47
- tree[node] = tree[left] + tree[right];
38
+ if (b == e) tree[node] = arr[b];
39
+ else {
40
+ int left = node << 1 , right = left | 1 , mid = (b+e) >> 1 ;
41
+ init (left, b, mid);
42
+ init (right, mid+1 , e);
43
+ tree[node] = tree[left] + tree[right];
44
+ }
48
45
}
49
46
50
47
int query (int node, int b, int e, int i, int j) {
51
- if (i > e || j < b) return 0 ;
52
- if (b >= i && e <= j) return tree[node];
53
- int left = node << 1 ;
54
- int right = (node << 1 ) + 1 ;
55
- int mid = (b + e) >> 1 ;
56
- int ls = query (left, b, mid, i, j);
57
- int rs = query (right, mid + 1 , e, i, j);
58
- return ls + rs;
59
- }
48
+ if (b > j || e < i) return 0 ;
49
+ if (b >= i && e <= j) return tree[node];
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);
52
+ }
60
53
61
54
void update (int node, int b, int e, int i, int val) {
62
- if (i > e || i < b) return ;
63
- if (b >= i && e <= i) {
64
- tree[node] = val;
65
- return ;
66
- }
67
- int left = node << 1 ;
68
- int right = (node << 1 ) + 1 ;
69
- int mid = (b + e) >> 1 ;
70
- update (left, b, mid, i, val);
71
- update (right, mid + 1 , e, i, val);
72
- tree[node] = tree[left] + tree[right];
55
+ if (b > i || e < i) return ;
56
+ if (b >= i && e <= i) {
57
+ tree[node] = val;
58
+ return ;
59
+ }
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];
73
64
}
74
65
75
66
int main () {
76
67
// freopen("in", "r", stdin);
77
-
78
68
int n, q, i, j, ans;
79
69
scanf (" %d %d" , &n, &q);
80
70
for (int k = 1 ; k <= n; scanf (" %d" , &arr[k]), k++);
0 commit comments