Advertisement
Manioc

seg tree

Apr 19th, 2018
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX 1000007
  3.  
  4. using namespace std;
  5.  
  6. int seg[4*MAX],acum[4*MAX], arr[MAX];
  7.  
  8. void build(int id, int l, int r){
  9.     if(l == r) seg[id] = arr[l];
  10.     else{
  11.         int mid = (l + r)/2;
  12.         build(2*id, l, mid);
  13.         build(2*id+1, mid+1, r);
  14.         seg[id] = max(seg[2*id], seg[2*id+1]);
  15.     }
  16. }
  17.  
  18. void update(int id, int l, int r, int pos, int val){
  19.     if(l == r) seg[id] = val;
  20.     else{
  21.         int mid = (l+r)/2;
  22.         if(mid <= pos) update(2*id, l, mid);
  23.         else update(2*id, mid+1, r);
  24.  
  25.         seg[id] = max(seg[2*id], seg[2*id+1]);
  26.     }
  27. }
  28.  
  29.  
  30. void add(int id, int l, int r, int val){
  31.     seg[id] = val*(r-l+1);
  32.     acum[id] += val;
  33. }
  34. void range(int id, int l, int r, int x, int y, int val){
  35.     if(l > y || r < x) return;
  36.     else if(x <= l && y <= r) add(id, l, r, val);
  37.     else{
  38.         int mid = (l + r)/2;
  39.         add(2*id, l, mid, acum[id]);
  40.         add(2*id+1, mid+1, r, acum[id]);
  41.         acum[id] = 0;
  42.         range(2*id, l, mid, x, y, val);
  43.         range(2*id+1, mid+1, r, x, y, val);
  44.         seg[id] = max(seg[2*id], seg[2*id+1]);
  45.     }
  46. }
  47.  
  48. int query(int id, int l, int r, int x, int y){
  49.     if(l > y || r < x) return 0;
  50.     else if(x >= l && y <= r) return seg[id];
  51.     else{
  52.         int mid = (l+r)/2;
  53.         add(2*id, l, mid, acum[id]);
  54.         add(2*id+1, mid+1, r, acum[id]);
  55.         acum[id] = 0;
  56.         return max(query(2*id, l, mid), query(2*id+1, mid+1, r));
  57.     }
  58. }
  59. int main(){
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement