Josif_tepe

Untitled

Oct 5th, 2025
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.05 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. using namespace std;
  4. const int maxn = 200005;
  5. typedef long long ll;
  6. const int INF = 2e9;
  7. int n, a[maxn];
  8.  
  9. ll segment_tree[3 * maxn];
  10.  
  11. ll merge_nodes(ll A, ll B) {
  12.     return A + B;
  13. }
  14.  
  15. void build_tree(int L = 0, int R = n - 1, int node = 1) {
  16.     if(L == R) {
  17.         segment_tree[node] = a[L];
  18.     }
  19.     else {
  20.         int middle = (L + R) / 2;
  21.         build_tree(L, middle, 2 * node);
  22.         build_tree(middle + 1, R, 2 * node + 1);
  23.         segment_tree[node] = merge_nodes(segment_tree[2 * node], segment_tree[2 * node + 1]);
  24.     }
  25. }
  26.  
  27. ll query(int i, int j, int L = 0, int R = n - 1, int node = 1) {
  28.     if(R < i or j < L) {
  29.         return 0;
  30.     }
  31.     if(i <= L and R <= j) {
  32.         return segment_tree[node];
  33.     }
  34.    
  35.     int middle = (L + R) / 2;
  36.     ll left_side = query(i, j, L, middle, 2 * node);
  37.     ll right_side = query(i, j, middle + 1, R, 2 * node + 1);
  38.    
  39.     return merge_nodes(left_side, right_side);
  40. }
  41.  
  42. void update(int idx, int new_value, int L = 0, int R = n - 1, int node = 1) {
  43.     if(L == R) {
  44.         segment_tree[node] = new_value;
  45.         return;
  46.     }
  47.    
  48.     int middle = (L + R) / 2;
  49.     if(idx <= middle) {
  50.         update(idx, new_value, L, middle, 2 * node);
  51.     }
  52.     else {
  53.         update(idx, new_value, middle + 1, R, 2 * node + 1);
  54.     }
  55.    
  56.     segment_tree[node] = merge_nodes(segment_tree[2 * node], segment_tree[2 * node + 1]);
  57. }
  58. int main() {
  59.     ios_base::sync_with_stdio(false);
  60.     int q;
  61.    
  62.     cin >> n >> q;
  63.    
  64.     for(int i = 0; i < n; i++) {
  65.         cin >> a[i];
  66.     }
  67.     build_tree();
  68.    
  69.     for(int i = 0; i < q; i++) {
  70.         int type;
  71.         cin >> type;
  72.        
  73.         if(type == 1) {
  74.             int idx, new_value;
  75.             cin >> idx >> new_value;
  76.            
  77.             update(idx - 1, new_value);
  78.         }
  79.         else {
  80.             int a, b;
  81.             cin >> a >> b;
  82.            
  83.             cout << query(a - 1, b - 1) << endl;
  84.         }
  85.        
  86.     }
  87.    
  88.  
  89.        
  90.     return 0;
  91. }
  92.  
Advertisement
Add Comment
Please, Sign In to add comment