Pearlfromsu

10 min own seg tree

Jun 5th, 2023
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.75 KB | None | 0 0
  1. /******************************************************************************
  2.  
  3.                               Online C++ Compiler.
  4.                Code, Compile, Run and Debug C++ program online.
  5. Write your code in this editor and press "Run" button to compile and execute it.
  6.  
  7. *******************************************************************************/
  8.  
  9. #include <iostream>
  10. #include <vector>
  11.  
  12. using namespace std;
  13.  
  14. vector<int> tree;
  15.    
  16. int getSum(int q, int tl, int tr, int l, int r) {
  17.     if(tl >= l && tr <= r)
  18.         return tree[q];
  19.     if(tl >= r || tr <= l)
  20.         return 0;
  21.     int mid = (tl + tr)/2;
  22.     int getl = getSum(q*2, tl, mid, l, r);
  23.     int getr = getSum(q*2+1, mid, tr, l, r);
  24.     return getl + getr;
  25. }
  26. int main()
  27. {
  28.     //15:03 - 15:13
  29.     int n;
  30.     cin >> n;
  31.     tree.resize(4*n, 0);
  32.     int k = 1;
  33.     while(k < n)
  34.         k*=2;
  35.     for(int i = 0; i < n; i++) {
  36.         int uk1 = k+i;
  37.         cin >> tree[uk1];
  38.         while(uk1 != 1) {
  39.             tree[uk1/2] = tree[(uk1/2)*2] + tree[(uk1/2)*2+1];
  40.             uk1/=2;
  41.         }
  42.     }
  43.    
  44.     int kkk;
  45.     cin >> kkk;
  46.     for(int i = 0; i < kkk; i++) {
  47.         char ch;
  48.         int a, b;
  49.         cin >> ch;
  50.         if(ch == '+') {
  51.             cin >> a >> b;
  52.             int uk1 = k+a;
  53.             tree[uk1] = b;
  54.             while(uk1 != 1) {
  55.                 tree[uk1/2] = tree[(uk1/2)*2] + tree[(uk1/2)*2+1];
  56.                 uk1/=2;
  57.             }
  58.         }
  59.         if(ch == '?') {
  60.             cin >> a >> b;
  61.             cout << "[" << a << ", " << b << "): " << getSum(1, 0, k, a, b) << '\n';
  62.         }
  63.        
  64.         for(int j = 0; j < k; j++)
  65.             cout << tree[k+j] << ' ';
  66.        
  67.         cout << '\n';
  68.     }
  69.     return 0;
  70. }
  71.  
Add Comment
Please, Sign In to add comment