Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL);
- using namespace std;
- typedef long long int lli;
- lli make_tree(vector<lli>& arr, vector<lli>& segtree, lli node, lli start, lli end) {
- if (start == end) return segtree[node] = arr[start];
- lli mid = (start + end) / 2;
- return segtree[node] = make_tree(arr, segtree, node * 2, start, mid) + make_tree(arr, segtree, node * 2 + 1, mid + 1, end);
- }
- void change_tree(vector<lli>& segtree, lli node, lli start, lli end, lli idx, lli update) {
- if (idx<start || idx>end) return;
- segtree[node] += update;
- if (start == end) return;
- lli mid = (start + end) / 2;
- change_tree(segtree, node * 2, start, mid, idx, update);
- change_tree(segtree, node * 2 + 1, mid + 1, end, idx, update);
- }
- lli sum_tree(vector<lli>& segtree, lli node, lli start, lli end, lli left, lli right) {
- if (left > end || right < start) return 0;
- if (left <= start && end <= right) return segtree[node];
- lli mid = (start + end) / 2;
- return sum_tree(segtree, node * 2, start, mid, left, right) + sum_tree(segtree, node * 2 + 1, mid + 1, end, left, right);
- }
- int main() {
- fastio;
- lli n, m, k;
- cin >> n >> m >> k;
- vector<lli> arr(n);
- vector<lli> segtree(4 * n);
- for (lli a, i = 0; i < n; i++) cin >> arr[i];
- make_tree(arr, segtree, 1, 0, n - 1);
- for (lli a, b, c, i = 0; i < m + k; i++) {
- cin >> a >> b >> c;
- if (a == 1) {
- lli dif = c - arr[b - 1];
- arr[b - 1] = c;
- change_tree(segtree, 1, 0, n - 1, b - 1, dif);
- }
- else {
- cout << sum_tree(segtree, 1, 0, n - 1, b - 1, c - 1) << "\n";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement