Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <set>
- #include <vector>
- #include <deque>
- #define se second
- #define fi first
- #define mp make_pair
- #define pb push_back
- using namespace std;
- vector<int> tree;
- vector<int> a;
- int get_sum(int t, int l, int r, int L, int R) {
- if ((r <= L) || (R <= l)) return 0;
- if ((L <= l) && (r <= R)) return tree[t];
- int m = (r + l) / 2;
- return get_sum(t * 2 + 1, l, m, L, R) + get_sum(t * 2 + 2, m, r, L, R);
- }
- void update(int t, int l, int r, int i, int x) {
- if ((i < l) || (r <= i)) return;
- if (r - l == 1) {
- tree[t] = x;
- return;
- }
- int m = (r + l) / 2;
- update(2 * t + 1, l, m, i, x);
- update(2 * t + 2, m, r, i, x);
- tree[t] = tree[t * 2 + 1] + tree[t * 2 + 2];
- }
- void build(int t, int l, int r) {
- if (r - l == 1) {
- tree[t] = a[l];
- return;
- }
- int m = (r + l) / 2;
- build(2 * t + 1, l, m);
- build(2 * t + 2, m, r);
- tree[t] = tree[t * 2 + 1] + tree[t * 2 + 2];
- }
- int main() {
- int n;
- cin >> n;
- a.resize(n);
- for (auto& e : a) cin >> e;
- tree.assign(4 * n, 0);
- build(0, 0, n);
- int t;
- cin >> t;
- while (t--) {
- int req;
- cin >> req;
- if (req == 1) {
- int l, r;
- cin >> l >> r; ///левая и правая граница запроса, с 1
- cout << get_sum(0, 0, n, l - 1, r) << '\n';
- } else {
- int i, x;
- cin >> i >> x; ///a[i] = x;
- update(0, 0, n, i - 1, x);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement