Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int tree[400100];
  6. int a[100100];
  7.  
  8. int Build(int node, int st, int en)
  9. {
  10.     if(st == en){
  11.         tree[node] = a[st];
  12.         return tree[node];
  13.     }
  14.     int mid = (st + en) / 2;
  15.     int p1 = 0, p2 = 0;
  16.     p1 = Build(node * 2, st, mid);
  17.     p2 = Build((node * 2) + 1, mid + 1, en);
  18.     tree[node] = p1 + p2;
  19.     return tree[node];
  20. }
  21.  
  22. int update(int node, int st, int en, int idx, int val)
  23. {
  24.     if(st == en && st == idx){
  25.         tree[node] = val;
  26.         return tree[node];
  27.     }
  28.     if(idx > en || idx < st){
  29.         return tree[node];
  30.     }
  31.     int mid = (st + en) / 2;
  32.     int p1 = 0, p2 = 0;
  33.     p1 = update(node * 2, st, mid, idx, val);
  34.     p2 = update((node * 2) + 1, mid + 1, en, idx, val);
  35.     tree[node] = p1 + p2;
  36.     return tree[node];
  37. }
  38.  
  39. int Query(int node, int st, int en, int i, int j)
  40. {
  41.     if(st == en && (i <= st && st <= j)){
  42.         return tree[node];
  43.     }
  44.     if(i > en || j < st){
  45.         return 0;
  46.     }
  47.     if(i <= st && en <= j){
  48.         return tree[node];
  49.     }
  50.     int mid = (st + en) / 2;
  51.     int p1 = 0, p2 = 0;
  52.     p1 = Query(node * 2, st, mid, i, j);
  53.     p2 = Query((node * 2) + 1, mid + 1, en, i, j);
  54.     return p1 + p2;
  55. }
  56.  
  57. int main()
  58. {
  59.     int n, t, i, j, x, Q;
  60.     cin >> n;
  61.     for(int i = 1 ; i <= n ; i++){
  62.         cin >> a[i];
  63.     }
  64.     Build(1, 1, n);
  65.     cin >> Q;
  66.     while(Q--){
  67.         cin >> t;
  68.         if(t == 1){
  69.             cin >> i >> j;
  70.             cout << Query(1, 1, n, i, j) << endl;
  71.         }
  72.         else{
  73.             cin >> i >> x;
  74.             update(1, 1, n, i, x);
  75.         }
  76.     }
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement