Alex_tz307

Iterative SegTree

Sep 17th, 2020 (edited)
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.76 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int N, Size = 1;
  6. vector < int > Tree;
  7.  
  8. void init(int N) {
  9.     while(Size < N)
  10.         Size <<= 1;
  11.     Tree.resize((Size << 1) | 1);
  12. }
  13.  
  14. int sum(int st, int dr) {
  15.     st += Size, dr += Size;
  16.     int s = 0;
  17.     while(st <= dr) {
  18.         if(st & 1)
  19.             s += Tree[st++];
  20.         if(!(dr & 1))
  21.             s += Tree[dr--];
  22.         st >>= 1;
  23.         dr >>= 1;
  24.     }
  25.     return s;
  26. }
  27.  
  28. void add(int k, int x) {
  29.     k += Size;
  30.     Tree[k] += x;
  31.     for(k >>= 1; k > 0; k >>= 1)
  32.         Tree[k] = Tree[k << 1] + Tree[(k << 1) | 1];
  33. }
  34.  
  35. int main() {
  36.     cin >> N;
  37.     init(N);
  38.     for(int i = 1; i <= N; ++i) {
  39.         int x;
  40.         cin >> x;
  41.         add(i, x);
  42.     }
  43.     cout << sum(1, N);
  44. }
  45.  
Advertisement
Add Comment
Please, Sign In to add comment