Advertisement
Josif_tepe

Untitled

Dec 16th, 2023
735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct node {
  5.     int value, lb, rb;
  6.     node *L, *R;
  7.     node(int _lb, int _rb) { // constructor (konsturktor so parametri)
  8.         lb = _lb;
  9.         rb = _rb;
  10.        
  11.         if(lb == rb) {
  12.             value = 0;
  13.         }
  14.         else {
  15.             int mid = (lb + rb) / 2;
  16.             L = new node(lb, mid);
  17.             R = new node(mid + 1, rb);
  18.             value = L->value + R->value;
  19.         }
  20.     }
  21.     int query(int i, int j) {
  22.         if(i <= lb and rb <= j) {
  23.             return value;
  24.         }
  25.         // i j l r i j
  26.         if(j < lb or rb < i) {
  27.             return 0;
  28.         }
  29.         return L->query(i, j) + R->query(i, j);
  30.     }
  31.     void update(int idx, int new_value) {
  32.         if(lb == rb) {
  33.             value = new_value;
  34.             return;
  35.         }
  36.         if(idx >= R->lb) {
  37.             R->update(idx, new_value);
  38.         }
  39.         else {
  40.             L->update(idx, new_value);
  41.         }
  42.         value = L->value + R->value;
  43.     }
  44. };
  45. int main() {
  46.     int n;
  47.     cin >> n;
  48.    
  49.     node * segment_tree = new node(0, n - 1);
  50.    
  51.     cout << segment_tree->query(0, n - 1) << endl;
  52.     segment_tree->update(0, 1);
  53.     segment_tree->update(1, 2);
  54.     segment_tree->update(3, 3);
  55.    
  56.     for(int i = 0; i < n; i++) {
  57.         cout << segment_tree->query(i, i) << " " ;
  58.     }
  59.     return 0;
  60. }
  61. /*
  62.  5
  63.  1 2 3 4 5
  64.  5
  65.  **/
  66.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement