Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int MAXN = (1 << 20) + 10;
- int n, END;
- int t[2*MAXN]; // or long long
- void build (int v, int tl, int tr) {
- if (tl == tr)
- return;
- else {
- int tm = (tl + tr) / 2;
- build (v*2, tl, tm);
- build (v*2+1, tm+1, tr);
- t[v] = t[v*2] + t[v*2+1];
- }
- }
- int sum (int v, int tl, int tr, int l, int r) {
- if (l > r)
- return 0;
- if (l == tl && r == tr)
- return t[v];
- int tm = (tl + tr) / 2;
- return sum (v*2, tl, tm, l, min(r,tm))
- + sum (v*2+1, tm+1, tr, max(l,tm+1), r);
- }
- void update (int v, int tl, int tr, int pos, int new_val) {
- if (tl == tr)
- t[v] = new_val;
- else {
- int tm = (tl + tr) / 2;
- if (pos <= tm)
- update (v*2, tl, tm, pos, new_val);
- else
- update (v*2+1, tm+1, tr, pos, new_val);
- t[v] = t[v*2] + t[v*2+1];
- }
- }
- int main() {
- cin >> n;
- while (END < n) END <<= 1;
- for (int i = 0; i < n; i++) {
- cin >> t[END + i];
- }
- build();
- // using sum(1, 1, END, l, r)
- // using update(1, 1, END, pos, value)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement