#include<iostream>
using namespace std;
#define int long long
#define rep(i, l, r) for (register int i = l; i <= r; i++)
template < typename T > void read(T & ff) {
T rr = 1;
ff = 0;
char ch = getchar();
while (!isdigit(ch)) {
if (ch == '-') rr = -1;
ch = getchar();
}
while (isdigit(ch)) {
ff = (ff << 1) + (ff << 3) + (ch ^ 48);
ch = getchar();
}
ff *= rr;
}
#define il inline
const int N = 2e6;
int n, a[N];
struct node {
int l, r, sum;
}
t[N << 2];
il int ls(int x) { return x << 1; }
il int rs(int x) { return x << 1 | 1; }
void build(int c, int l, int r) {
t[c].l = l;
t[c].r = r;
if (l == r) {
t[c].sum = a[l];
return;
}
int mid = (l + r) / 2;
build(ls(c), l, mid);
build(rs(c), mid + 1, r);
t[c].sum = t[ls(c)].sum + t[rs(c)].sum;
return;
}
void update(int c, int l, int r) {
if (t[c].l == t[c].r) {
t[c].sum = r;
return;
}
int mid = (t[c].l + t[c].r) / 2;
if (r <= mid) update(ls(c), l, r);
else update(rs(c), l, r);
t[c].sum = t[ls(c)].sum + t[rs(c)].sum;
return;
}
int query(int c, int l, int r) {
if (t[c].l == l && t[c].r == r) return t[c].sum;
int mid = (t[c].r + t[c].l) / 2;
if (r <= mid) return query(ls(c), l, r);
else if (l > mid) return query(rs(c), l, r);
else {
int t1 = query(ls(c), l, mid);
int t2 = query(rs(c), mid + 1, r);
return t1 + t2;
}
}
signed main() {
read(n);
rep(i, 1, n) {
read(a[i]);
}
build(1, 1, n);
int q;
read(q);
while (q--) {
int op, L, R;
read(op);
read(L);
read(R);
if (op == 1) { printf("%lld\n", query(1, L, R)); } //
else update(1, L, R);
}
return 0;
}
找不出哪错(;´д`)ゞ