willy108

pst

Feb 21st, 2022 (edited)
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.63 KB | None | 0 0
  1. void dup(int& k){
  2.   ind++;
  3.   sum[ind] = sum[k];
  4.   add[ind] = add[k];
  5.   lc[ind] = lc[k];
  6.   rc[ind] = rc[k];
  7.   k = ind;
  8. }
  9.  
  10. void U(int p, int val, int& k, int L, int R){
  11.   if(R <= L || p < L || R <= p) return ;
  12.   dup(k);
  13.   if(L + 1 == R){
  14.     sum[k] += val;
  15.     return ;
  16.   }
  17.  
  18.   int mid = (L + R) / 2;
  19.   U(p, val, lc[k], L, mid);
  20.   U(p, val, rc[k], mid, R);
  21.   sum[k] = sum[lc[k]] + sum[rc[k]];
  22. }
  23.  
  24. int S(int qL, int qR, int k, int L, int R){
  25.   if(R <= L || qR <= L || R <= qL) return 0;
  26.   if(qL <= L && R <= qR) return sum[k];
  27.   int mid = (L + R) / 2;
  28.   return S(qL, qR, lc[k], L, mid) + S(qL, qR, rc[k], mid, R);
  29. }
  30.  
Add Comment
Please, Sign In to add comment