MathQ_

Untitled

Oct 28th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.89 KB | None | 0 0
  1.     #include <iostream>
  2.     #include <algorithm>
  3.     #include <iterator>
  4.     #include <cmath>
  5.     #include <vector>
  6.     #include <stack>
  7.     #include <deque>
  8.     #include <queue>
  9.     #include <set>
  10.     #include <map>
  11.     #include <stack>
  12.     #include <string>
  13.     #include <random>
  14.     #include <numeric>
  15.     #include <unordered_set>
  16.      
  17.     typedef long long ll;
  18.     typedef long double lb;
  19.      
  20.     #define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
  21.     #define file_in freopen("input.txt", "r", stdin);
  22.     #define fori(st, n) for (ll i = st; i < n; ++i)
  23.     #define forj(st, n) for (ll j = st; j < n; ++j)
  24.     #define fork(st, n) for (ll k = st; k < n; ++k)
  25.     #define fors(st, n) for (ll s = st; s < n; ++s)
  26.     #define forb(n) for (ll i = n - 1; i > 0; --i)
  27.     #define pb push_back
  28.     #define mp make_pair
  29.     #define all(x) (x).begin(),(x).end()
  30.     #define fi first
  31.     #define se second
  32.      
  33.     using namespace std;
  34.      
  35.     struct seg_tree {
  36.         vector<int> a;
  37.         vector<ll> sum;
  38.      
  39.         seg_tree(vector<int> _a) {
  40.             int n = (int)_a.size();
  41.             a = _a;
  42.             sum.resize(4 * n);
  43.             build(0, 0, n);
  44.         }
  45.      
  46.         void build(int id, int l, int r) {
  47.             if (l + 1 == r) {
  48.                 sum[id] = a[l];
  49.                 return;
  50.             }
  51.      
  52.             int m = (l + r) / 2;
  53.             build(id * 2 + 1, l, m);
  54.             build(id * 2 + 2, m, r);
  55.      
  56.             sum[id] = sum[id * 2 + 1] + sum[id * 2 + 2];
  57.         }
  58.      
  59.         void update(int id, int l, int r, int i, int x) {
  60.             if (l + 1 == r) {
  61.                 sum[id] = x;
  62.                 return;
  63.             }
  64.      
  65.             int m = (l + r) / 2;
  66.             if (i < m) {
  67.                 update(id * 2 + 1, l, m, i, x);
  68.             } else {
  69.                 update(id * 2 + 2, m, r, i, x);
  70.             }
  71.             sum[id] = sum[id * 2 + 1] + sum[id * 2 + 2];
  72.         }
  73.      
  74.         ll get_sum(int id, int l, int r, int lq, int rq) {
  75.             if (r <= lq || l >= rq) {
  76.                 return 0;
  77.             }
  78.             if (lq <= l && r <= rq) {
  79.                 return sum[id];
  80.             }
  81.             int m = (l + r) / 2;
  82.             ll sum1 = get_sum(id * 2 + 1, l, m, lq, rq);
  83.             ll sum2 = get_sum(id * 2 + 2, m, r, lq, rq);
  84.             return sum1 + sum2;
  85.         }
  86.      
  87.         void write(int id, int l, int r) {
  88.             if (l + 1 == r) {
  89.                 cout << sum[id] << " ";
  90.                 return;
  91.             }
  92.             int m = (l + r) / 2;
  93.             write(id * 2 + 1, l, m);
  94.             write(id * 2 + 2, m, r);
  95.         }
  96.     };
  97.      
  98.     int main()
  99.     {
  100.         fast
  101.         //file_in
  102.         int n, m;
  103.         cin >> n >> m;
  104.         vector<int> w(n);
  105.         for (auto &it : w) cin >> it;
  106.         seg_tree s(w);
  107.         int type, l, r, i, v;
  108.         while(m--) {
  109.             cin >> type;
  110.             //s.write(0, 0, n);
  111.             //cout << endl;
  112.             if (type == 1) {
  113.                 cin >> i >> v;
  114.                 s.update(0, 0, n, i, v);
  115.             } else if (type == 2) {
  116.                 cin >> l >> r;
  117.                 cout << s.get_sum(0, 0, n, l, r) << "\n";
  118.             }
  119.            
  120.         }
  121.         return 0;
  122.     }
Advertisement
Add Comment
Please, Sign In to add comment