willy108

segment of the segtree code. :D

Feb 6th, 2021 (edited)
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.78 KB | None | 0 0
  1. int m[max_v], arr[max_v];
  2. int n, q, s = 1; //n for size, q for query and s for something later
  3. void make_tree(){
  4.     while(s <= n) s *= 2; s *= 2;
  5.     for(int i = s - 1; i < n + s - 1; i++){
  6.         m[i] = arr[i - (s - 1)];
  7.     }
  8.     for(int i = s - 2; i >= 0; i--){
  9.         m[i] = max(m[LC(i)], m[RC(i)]);
  10.     }
  11. }
  12.  
  13. void U(int p, int val, int k, int L, int R){
  14.     if(L < p || p <= R || R <= L) return ;
  15.     if(L + 1 == R){
  16.         assert(L == p);
  17.         m[k] = val;
  18.         return ;
  19.     }
  20.     int mid = (L + R) / 2;
  21.     U(p, val, LC(k), L, mid);
  22.     U(p, val, RC(k), mid, R);
  23.     m[k] = max(m[LC(k)], m[RC(k)]);
  24. }
  25.  
  26. int Q(int qL, int qR, int k, int L, int R){
  27.     if(qR <= L || R <= qL || R <= L) return 0;
  28.     if(qL <= L && R <= qR) return m[k];
  29.     int mid = (L + R) / 2;
  30.     return max(Q(qL, qR, LC(k), L, mid), Q(qL, qR, RC(k), mid, R));
  31. }
  32.  
Add Comment
Please, Sign In to add comment