Skip to content

Instantly share code, notes, and snippets.

@AliOsm
Created August 5, 2022 18:03
Show Gist options
  • Save AliOsm/75b3658d1a05d800003197900113155d to your computer and use it in GitHub Desktop.
Save AliOsm/75b3658d1a05d800003197900113155d to your computer and use it in GitHub Desktop.
#include <bits/stdc++.h>
using namespace std;
int const N = 1e5 + 1;
int n, m, a[N], type, s, e, t, v, seg[N * 4];
void build(int at, int l, int r) {
if(l == r) {
seg[at] = a[l];
return;
}
int m = (l + r) / 2;
build(at * 2, l, m);
build(at * 2 + 1, m + 1, r);
seg[at] = seg[at * 2] + seg[at * 2 + 1];
}
int get(int at, int l, int r) {
if(l > e || r < s)
return 0;
if(l >= s && r <= e)
return seg[at];
int m = (l + r) / 2;
return get(at * 2, l, m) + get(at * 2 + 1, m + 1, r);
}
void update(int at, int l, int r) {
if(t < l || t > r)
return;
if(l == r) {
seg[at] = v;
return;
}
int m = (l + r) / 2;
update(at * 2, l, m);
update(at * 2 + 1, m + 1, r);
seg[at] = seg[at * 2] + seg[at * 2 + 1];
}
int main() {
#ifndef ONLINE_JUDGE
freopen("input.in", "r", stdin);
#endif
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d", a + i);
}
build(1, 1, n);
scanf("%d", &m);
for (int i = 0; i < m; ++i) {
scanf("%d", &type);
if(type == 1) {
scanf("%d %d", &s, &e);
printf("%d\n", get(1, 1, n));
} else {
scanf("%d %d", &t, &v);
update(1, 1, n);
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment