Advertisement
nowob

Untitled

Apr 12th, 2025
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. void build_tree(vector<ll>& seg, const vector<ll>& arr, int idx, int l, int r){
  5.     if(l == r){
  6.         seg[idx] = arr[l];
  7.         return;
  8.     }
  9.     int mid = (l + r) / 2;
  10.     build_tree(seg, arr, idx * 2, l, mid);
  11.     build_tree(seg, arr, idx * 2 + 1, mid + 1, r);
  12.     seg[idx] = seg[idx * 2] + seg[idx * 2 + 1];
  13. }
  14. ll query_tree(const vector<ll>& seg, int idx, int l, int r, int ql, int qr){
  15.     if(ql > r || qr < l) return 0;
  16.     if(ql <= l && r <= qr) return seg[idx];
  17.     int mid = (l + r) / 2;
  18.     return query_tree(seg, idx * 2, l, mid, ql, qr) +
  19.            query_tree(seg, idx * 2 + 1, mid + 1, r, ql, qr);
  20. }
  21. void update_tree(vector<ll>& seg, int idx, int l, int r, int pos, ll new_val){
  22.     if(l == r){
  23.         seg[idx] = new_val;
  24.         return;
  25.     }
  26.     int mid = (l + r) / 2;
  27.     if(pos <= mid)
  28.         update_tree(seg, idx * 2, l, mid, pos, new_val);
  29.     else
  30.         update_tree(seg, idx * 2 + 1, mid + 1, r, pos, new_val);
  31.     seg[idx] = seg[idx * 2] + seg[idx * 2 + 1];
  32. }
  33.  
  34. int main(){
  35.     ios::sync_with_stdio(false);
  36.     cin.tie(0);
  37.     int n, q;
  38.     cin >> n >> q;
  39.     vector<ll> arr(n + 1);
  40.     for(int i = 1; i <= n; i++){
  41.         cin >> arr[i];
  42.     }
  43.     vector<ll> seg(4 * n, 0);
  44.     build_tree(seg, arr, 1, 1, n);
  45.     while(q--){
  46.         int type;
  47.         cin >> type;
  48.         if(type == 1){
  49.             int k;
  50.             ll u;
  51.             cin >> k >> u;
  52.             update_tree(seg, 1, 1, n, k, u);
  53.             arr[k] = u;
  54.         }
  55.         else{
  56.             int l, r;
  57.             cin >> l >> r;
  58.             cout << query_tree(seg, 1, 1, n, l, r) << "\n";
  59.         }
  60.     }
  61. }
  62.  
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement