Advertisement
nq1s788

дерево отрезков

May 22nd, 2025
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <vector>
  4. #include <deque>
  5.  
  6. #define se second
  7. #define fi first
  8. #define mp make_pair
  9. #define pb push_back
  10.  
  11. using namespace std;
  12.  
  13. vector<int> tree;
  14. vector<int> a;
  15.  
  16. int get_sum(int t, int l, int r, int L, int R) {
  17.     if ((r <= L) || (R <= l)) return 0;
  18.     if ((L <= l) && (r <= R)) return tree[t];
  19.     int m = (r + l) / 2;
  20.     return get_sum(t * 2 + 1, l, m, L, R) + get_sum(t * 2 + 2, m, r, L, R);
  21. }
  22.  
  23. void update(int t, int l, int r, int i, int x) {
  24.     if ((i < l) || (r <= i)) return;
  25.     if (r - l == 1) {
  26.         tree[t] = x;
  27.         return;
  28.     }
  29.     int m = (r + l) / 2;
  30.     update(2 * t + 1, l, m, i, x);
  31.     update(2 * t + 2, m, r, i, x);
  32.     tree[t] = tree[t * 2 + 1] + tree[t * 2 + 2];
  33. }
  34.  
  35. void build(int t, int l, int r) {
  36.     if (r - l == 1) {
  37.         tree[t] = a[l];
  38.         return;
  39.     }
  40.     int m = (r + l) / 2;
  41.     build(2 * t + 1, l, m);
  42.     build(2 * t + 2, m, r);
  43.     tree[t] = tree[t * 2 + 1] + tree[t * 2 + 2];
  44. }
  45.  
  46. int main() {
  47.     int n;
  48.     cin >> n;
  49.     a.resize(n);
  50.     for (auto& e : a) cin >> e;
  51.     tree.assign(4 * n, 0);
  52.     build(0, 0, n);
  53.     int t;
  54.     cin >> t;
  55.     while (t--) {
  56.         int req;
  57.         cin >> req;
  58.         if (req == 1) {
  59.             int l, r;
  60.             cin >> l >> r; ///левая и правая граница запроса, с 1
  61.             cout << get_sum(0, 0, n, l - 1, r) << '\n';
  62.         } else {
  63.             int i, x;
  64.             cin >> i >> x; ///a[i] = x;
  65.             update(0, 0, n, i - 1, x);
  66.         }
  67.     }
  68.     return 0;
  69. }
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement