silentkiler029

Segment Tree - Nihal Vai

Jun 1st, 2021 (edited)
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define mid ((b+e)/2)
  3. const int sz=100005; // size of array
  4. int arr[sz],seg[sz*4],n;
  5. void build(int node,int b,int e){
  6.     if(b==e){
  7.         seg[node]=arr[b];
  8.         return;
  9.     }
  10.     build(node*2,b,mid);
  11.     build(node*2+1,mid+1,e);
  12.     seg[node]=seg[node*2]+seg[node*2+1];
  13.     /*
  14.    ? seg[node]=max(seg[node*2],seg[node*2+1]);
  15.     seg[node]=min(seg[node*2],seg[node*2+1]);
  16.     */
  17. }
  18. int query(int node,int b,int e,int l,int r) // l r is range for query
  19. {
  20.     if(b>r || e<l) return 0; // return INT_MAX for min query return INT_MIN for max query
  21.     if(b>=l && e<=r){
  22.         return seg[node];
  23.     }
  24.     return query(node*2,b,mid,l,r)+query(node*2+1,mid+1,e,l,r);
  25.     /*
  26.     return max(query(node*2,b,mid,l,r),query(node*2+1,mid+1,e,l,r));
  27.     return min(query(node*2,b,mid,l,r),query(node*2+1,mid+1,e,l,r));
  28.     */
  29. }
  30. // todo  1 6 9 8 9 7
  31. void update(int node,int b,int e,int i,int val) // update at i'th index with value val
  32. {
  33.     if(b>i || e<i) return;
  34.     if(b==e){
  35.         arr[i]=val;
  36.         seg[node]=val;
  37.         return;
  38.     }
  39.     update(node*2,b,mid,i,val);
  40.     update(node*2+1,mid+1,e,i,val);
  41.     seg[node]=seg[node*2]+seg[node*2+1];
  42.     /*
  43.     seg[node]=max(seg[node*2],seg[node*2+1]);
  44.     seg[node]=min(seg[node*2],seg[node*2+1]);
  45.     */
  46. }
  47. /* //?  2
  48.             26 1 4
  49.           9    17
  50.         1  8  9  8  
  51.  */
Add Comment
Please, Sign In to add comment