//
// Created By - Shiv Shankar
//
// https://w...content-available-to-author-only...j.com/problems/PSEGTREE/
#include <bits/stdc++.h>
using namespace std;
#define REP(i, a, b) for(int i = a; i < b; i++)
#define RREP(i, a, b) for(int i = a-1; i >= b; i--)
#define PB push_back
#define MP make_pair
#define MOD 1000000007
#define INF 0x7fffffff
#define MAX 100005
typedef long long ll;
typedef pair< int, int > PII;
void optimizeIO(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
}
struct Vertex{
Vertex *l, *r;
int val;
Vertex(int v): l(nullptr), r(nullptr), val(v){}
Vertex(Vertex * a, Vertex * b): l(a), r(b), val(0){
if( l ) val += a->val;
if( r ) val += b->val;
}
};
vector< Vertex * > seg;
vector< int > arr(MAX);
Vertex * build(int tl, int tr){
if( tl == tr )
return new Vertex(arr[tl]);
return new Vertex( build(tl, (tl+tr)/2), build((tl+tr)/2+1, tr));
}
Vertex * update(Vertex * root, int tl, int tr, int idx, int v){
if( tl == tr ){
assert(tl == idx);
return new Vertex(v);
}
if( idx <= (tl+tr)/2 )
return new Vertex( update(root->l, tl, (tl+tr)/2, idx, v), root->r);
else
return new Vertex( root->l, update(root->r, (tl+tr)/2+1, tr, idx, v));
}
int query( Vertex * root, int tl, int tr, int l, int r){
if( tl > r || tr < l )
return 0;
if( tl >= l && tr <= r )
return root->val;
return query(root->l, tl, (tl+tr)/2, l, r) + query(root->r, (tl+tr)/2+1, tr, l, r);
}
int main(){
optimizeIO();
int n, q, a, b, c, d;
cin >> n;
REP(i, 0, n)
cin >> arr[i];
seg.push_back(build(0, n-1));
cin >> q;
REP(i, 0, q){
cin >> a >> b >> c >> d;
if( a == 1 ){
seg.push_back( update(seg[b], 0, n-1, c-1, d));
}else{
cout << query(seg[b], 0, n-1, c-1, d-1) << endl;
}
}
return 0;
}
Ly8gCi8vIENyZWF0ZWQgQnkgLSBTaGl2IFNoYW5rYXIKLy8KLy8gaHR0cHM6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5qLmNvbS9wcm9ibGVtcy9QU0VHVFJFRS8KIAojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiNkZWZpbmUgUkVQKGksIGEsIGIpIGZvcihpbnQgaSA9IGE7IGkgPCBiOyBpKyspCiNkZWZpbmUgUlJFUChpLCBhLCBiKSBmb3IoaW50IGkgPSBhLTE7IGkgPj0gYjsgaS0tKQojZGVmaW5lIFBCIHB1c2hfYmFjawojZGVmaW5lIE1QIG1ha2VfcGFpcgojZGVmaW5lIE1PRCAxMDAwMDAwMDA3CiNkZWZpbmUgSU5GIDB4N2ZmZmZmZmYKI2RlZmluZSBNQVggMTAwMDA1CiAKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjwgaW50LCBpbnQgPiBQSUk7CiAKdm9pZCBvcHRpbWl6ZUlPKCl7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCiAgICBjaW4udGllKE5VTEwpOwp9CiAKc3RydWN0IFZlcnRleHsKCVZlcnRleCAqbCwgKnI7CglpbnQgdmFsOwoJVmVydGV4KGludCB2KTogbChudWxscHRyKSwgcihudWxscHRyKSwgdmFsKHYpe30KCVZlcnRleChWZXJ0ZXggKiBhLCBWZXJ0ZXggKiBiKTogbChhKSwgcihiKSwgdmFsKDApewoJCWlmKCBsICkgdmFsICs9IGEtPnZhbDsKCQlpZiggciApIHZhbCArPSBiLT52YWw7Cgl9Cn07CiAKdmVjdG9yPCBWZXJ0ZXggKiA+IHNlZzsKdmVjdG9yPCBpbnQgPiBhcnIoTUFYKTsKIAogClZlcnRleCAqIGJ1aWxkKGludCB0bCwgaW50IHRyKXsKCWlmKCB0bCA9PSB0ciApCgkJcmV0dXJuIG5ldyBWZXJ0ZXgoYXJyW3RsXSk7CglyZXR1cm4gbmV3IFZlcnRleCggYnVpbGQodGwsICh0bCt0cikvMiksIGJ1aWxkKCh0bCt0cikvMisxLCB0cikpOwp9CiAKVmVydGV4ICogdXBkYXRlKFZlcnRleCAqIHJvb3QsIGludCB0bCwgaW50IHRyLCBpbnQgaWR4LCBpbnQgdil7CglpZiggdGwgPT0gdHIgKXsKCQlhc3NlcnQodGwgPT0gaWR4KTsKCQlyZXR1cm4gbmV3IFZlcnRleCh2KTsKCX0KCWlmKCBpZHggPD0gKHRsK3RyKS8yICkKCQlyZXR1cm4gbmV3IFZlcnRleCggdXBkYXRlKHJvb3QtPmwsIHRsLCAodGwrdHIpLzIsIGlkeCwgdiksIHJvb3QtPnIpOwoJZWxzZQoJCXJldHVybiBuZXcgVmVydGV4KCByb290LT5sLCB1cGRhdGUocm9vdC0+ciwgKHRsK3RyKS8yKzEsIHRyLCBpZHgsIHYpKTsKfQogCmludCBxdWVyeSggVmVydGV4ICogcm9vdCwgaW50IHRsLCBpbnQgdHIsIGludCBsLCBpbnQgcil7CglpZiggdGwgPiByIHx8IHRyIDwgbCApCgkJcmV0dXJuIDA7CglpZiggdGwgPj0gbCAmJiB0ciA8PSByICkKCQlyZXR1cm4gcm9vdC0+dmFsOwoJcmV0dXJuIHF1ZXJ5KHJvb3QtPmwsIHRsLCAodGwrdHIpLzIsIGwsIHIpICsgcXVlcnkocm9vdC0+ciwgKHRsK3RyKS8yKzEsIHRyLCBsLCByKTsKfQogCmludCBtYWluKCl7CglvcHRpbWl6ZUlPKCk7CglpbnQgbiwgcSwgYSwgYiwgYywgZDsKCWNpbiA+PiBuOwoJUkVQKGksIDAsIG4pCgkJY2luID4+IGFycltpXTsKCXNlZy5wdXNoX2JhY2soYnVpbGQoMCwgbi0xKSk7CgljaW4gPj4gcTsJCglSRVAoaSwgMCwgcSl7CgkJY2luID4+IGEgPj4gYiA+PiBjID4+IGQ7CgkJaWYoIGEgPT0gMSApewoJCQlzZWcucHVzaF9iYWNrKCB1cGRhdGUoc2VnW2JdLCAwLCBuLTEsIGMtMSwgZCkpOwoJCX1lbHNlewoJCQljb3V0IDw8IHF1ZXJ5KHNlZ1tiXSwgMCwgbi0xLCBjLTEsIGQtMSkgPDwgZW5kbDsKCQl9Cgl9CiAKCXJldHVybiAwOwp9IA==