Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. const int MAXN = (1 << 20) + 10;
  2. int n, END;
  3. int t[2*MAXN]; // or long long
  4.  
  5. void build (int v, int tl, int tr) {
  6.     if (tl == tr)
  7.         return;
  8.     else {
  9.         int tm = (tl + tr) / 2;
  10.         build (v*2, tl, tm);
  11.         build (v*2+1, tm+1, tr);
  12.         t[v] = t[v*2] + t[v*2+1];
  13.     }
  14. }
  15.  
  16. int sum (int v, int tl, int tr, int l, int r) {
  17.     if (l > r)
  18.         return 0;
  19.     if (l == tl && r == tr)
  20.         return t[v];
  21.     int tm = (tl + tr) / 2;
  22.     return sum (v*2, tl, tm, l, min(r,tm))
  23.         + sum (v*2+1, tm+1, tr, max(l,tm+1), r);
  24. }
  25.  
  26. void update (int v, int tl, int tr, int pos, int new_val) {
  27.     if (tl == tr)
  28.         t[v] = new_val;
  29.     else {
  30.         int tm = (tl + tr) / 2;
  31.         if (pos <= tm)
  32.             update (v*2, tl, tm, pos, new_val);
  33.         else
  34.             update (v*2+1, tm+1, tr, pos, new_val);
  35.         t[v] = t[v*2] + t[v*2+1];
  36.     }
  37. }
  38.  
  39. int main() {
  40.     cin >> n;
  41.     while (END < n) END <<= 1;
  42.     for (int i = 0; i < n; i++) {
  43.         cin >> t[END + i];
  44.     }
  45.     build();
  46.  
  47.     // using sum(1, 1, END, l, r)
  48.     // using update(1, 1, END, pos, value)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement