Advertisement
Jasir

Segment tree

Sep 24th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1.  
  2. int arr[mx];
  3. int tree[mx * 3];
  4. void init(int node, int b, int e){
  5.     if (b == e) {
  6.         tree[node] = arr[b];
  7.         return;
  8.     }
  9.     int Left = node * 2;
  10.     int Right = node * 2 + 1;
  11.     int mid = (b + e) / 2;
  12.     init(Left, b, mid);
  13.     init(Right, mid + 1, e);
  14.     tree[node] = tree[Left] + tree[Right];
  15. }
  16. int query(int node, int b, int e, int i, int j){
  17.     if (i > e || j < b)
  18.         return 0;
  19.     if (b >= i && e <= j)
  20.         return tree[node];
  21.     int Left = node * 2;
  22.     int Right = node * 2 + 1;
  23.     int mid = (b + e) / 2;
  24.     int p1 = query(Left, b, mid, i, j);
  25.     int p2 = query(Right, mid + 1, e, i, j);
  26.     return p1 + p2;
  27. }
  28. void update(int node, int b, int e, int i, int newvalue){
  29.     if (i > e || i < b)
  30.         return;
  31.     if (b >= i && e <= i) {
  32.         tree[node] = newvalue;
  33.         return;
  34.     }
  35.     int Left = node * 2;
  36.     int Right = node * 2 + 1;
  37.     int mid = (b + e) / 2;
  38.     update(Left, b, mid, i, newvalue);
  39.     update(Right, mid + 1, e, i, newvalue);
  40.     tree[node] = tree[Left] + tree[Right];
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement