Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.70 KB | None | 0 0
  1. int tree[MX];
  2.  
  3. int st , en , flag[MX] , upd;
  4.  
  5. void inc(int x , int V){
  6.     tree[x] += V;
  7.     flag[x] += V;
  8. }
  9. void push(int x){
  10.     if(flag[x] == 0) return;
  11.     inc(x*2 , flag[x]);
  12.     inc(x*2+1 , flag[x]);
  13.     flag[x] = 0;
  14. }
  15. int query(int x , int a , int b){
  16.     if(st > b || en < a) return 0;
  17.     if(a >= st && b <= en) return tree[x];
  18.     push(x);
  19.     return max(query(x*2 , a , (a+b)/2) , query(x*2+1 , (a+b)/2+1 , b));
  20. }
  21. void update(int x , int a , int b){
  22.     if(st > b || en < a) return;
  23.     if(a >= st && b <= en){
  24.         inc(x , upd);
  25.         return;
  26.     }
  27.     push(x);
  28.     update(x*2 , a , (a+b)/2);
  29.     update(x*2+1 , (a+b)/2+1 , b);
  30.     tree[x] = max(tree[x*2] , tree[x*2+1]);
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement