Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. struct stree {
  2.     vector<long long> tree;
  3.     unsigned int size;
  4.     stree() {
  5.         size = 0;
  6.     }
  7.     stree(const vector<long long> & init_tree) {
  8.         for(size = 1; size < init_tree.size(); size <<= 1);
  9.         tree.assign((size << 1) | 1, 0);
  10.         for(unsigned int i = 0; i < init_tree.size(); i++) {
  11.             update(i, init_tree[i]);
  12.         }
  13.     }
  14.  
  15.     void update(unsigned int i, long long value) {
  16.         i += size;
  17.         tree[i] = value;
  18.         for(i >>= 1; i > 0; i >>= 1) {
  19.             tree[i] = tree[i << 1] + tree[(i << 1) | 1];
  20.         }
  21.     }
  22.  
  23.     long long sum(unsigned int l, unsigned int r) {
  24.         long long res = 0;
  25.         for (l += size, r += size; l <= r; l >>= 1, r >>= 1) {
  26.             if (l & 1) {
  27.                 res += tree[l];
  28.                 l++;
  29.             }
  30.             if ((r & 1) == 0) {
  31.                 res += tree[r];
  32.                 r--;
  33.             }
  34.         }
  35.         return res;
  36.     }
  37. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement