Jeremiah_

Segment Tree Implementation

Apr 26th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. int seq[MAXN], segt[4*MAXN], n;
  2.  
  3. void build (int node, int l, int r) {
  4.     if (l == r) {
  5.         segt[node] = seq[l];
  6.     }else {
  7.         build(2*node+1, l, (l+r)/2);
  8.         build(2*node+2, (l+r)/2+1, r);
  9.         segt[node] = segt[node*2+1] * segt[node*2+2];
  10.     }
  11.  
  12. }
  13.  
  14. void update (int node, int l, int r, int pos, int val) {
  15.     if (l == r) {
  16.         seq[pos] = segt[node] = val;
  17.     } else {
  18.         int mid = (l+r)/2;
  19.         if (pos <= mid) update(2*node+1, l, mid, pos, val);
  20.         else update(2*node+2, mid+1, r, pos, val);
  21.         segt[node] = segt[node*2+1] * segt[node*2+2];
  22.     }
  23. }
  24.  
  25. int query  (int node, int l, int r, int low, int up) {
  26.     if (low > r || up < l) {
  27.         return 1;
  28.     }
  29.     if (low <= l && up >= r) {
  30.         return segt[node];
  31.     } else {
  32.         int mid = (l+r)/2;
  33.         return query(node*2+1, l, mid, low, up)*query(node*2+2, mid+1, r, low, up);
  34.     }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment