//
// 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));
}
int last,nn;
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);
}
Vertex * update(Vertex * root, int tl, int tr, int idx, int v){
if( tl == tr ){
assert(tl == idx);
return new Vertex(v+query(seg[last], 0, nn-1, idx, idx));
}
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 main(){
optimizeIO();
int n, q, a, b, c, d;
cin >> n;
nn = 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;
last = b;
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+IHNlZzsKdmVjdG9yPCBpbnQgPiBhcnIoTUFYKTsKIAogClZlcnRleCAqIGJ1aWxkKGludCB0bCwgaW50IHRyKXsKCWlmKCB0bCA9PSB0ciApCgkJcmV0dXJuIG5ldyBWZXJ0ZXgoYXJyW3RsXSk7CglyZXR1cm4gbmV3IFZlcnRleCggYnVpbGQodGwsICh0bCt0cikvMiksIGJ1aWxkKCh0bCt0cikvMisxLCB0cikpOwp9CgppbnQgbGFzdCxubjsgCgppbnQgcXVlcnkoIFZlcnRleCAqIHJvb3QsIGludCB0bCwgaW50IHRyLCBpbnQgbCwgaW50IHIpewoJaWYoIHRsID4gciB8fCB0ciA8IGwgKQoJCXJldHVybiAwOwoJaWYoIHRsID49IGwgJiYgdHIgPD0gciApCgkJcmV0dXJuIHJvb3QtPnZhbDsKCXJldHVybiBxdWVyeShyb290LT5sLCB0bCwgKHRsK3RyKS8yLCBsLCByKSArIHF1ZXJ5KHJvb3QtPnIsICh0bCt0cikvMisxLCB0ciwgbCwgcik7Cn0KClZlcnRleCAqIHVwZGF0ZShWZXJ0ZXggKiByb290LCBpbnQgdGwsIGludCB0ciwgaW50IGlkeCwgaW50IHYpewoJaWYoIHRsID09IHRyICl7CgkJYXNzZXJ0KHRsID09IGlkeCk7CgkJcmV0dXJuIG5ldyBWZXJ0ZXgoditxdWVyeShzZWdbbGFzdF0sIDAsIG5uLTEsIGlkeCwgaWR4KSk7Cgl9CglpZiggaWR4IDw9ICh0bCt0cikvMiApCgkJcmV0dXJuIG5ldyBWZXJ0ZXgoIHVwZGF0ZShyb290LT5sLCB0bCwgKHRsK3RyKS8yLCBpZHgsIHYpLCByb290LT5yKTsKCWVsc2UKCQlyZXR1cm4gbmV3IFZlcnRleCggcm9vdC0+bCwgdXBkYXRlKHJvb3QtPnIsICh0bCt0cikvMisxLCB0ciwgaWR4LCB2KSk7Cn0KIAppbnQgbWFpbigpewoJb3B0aW1pemVJTygpOwoJaW50IG4sIHEsIGEsIGIsIGMsIGQ7CgljaW4gPj4gbjsKCW5uID0gbjsKCVJFUChpLCAwLCBuKQoJCWNpbiA+PiBhcnJbaV07CglzZWcucHVzaF9iYWNrKGJ1aWxkKDAsIG4tMSkpOwoJY2luID4+IHE7CQoJUkVQKGksIDAsIHEpewoJCWNpbiA+PiBhID4+IGIgPj4gYyA+PiBkOwoJCWxhc3QgPSBiOwoJCWlmKCBhID09IDEgKXsKCQkJc2VnLnB1c2hfYmFjayggdXBkYXRlKHNlZ1tiXSwgMCwgbi0xLCBjLTEsIGQpKTsKCQl9ZWxzZXsKCQkJY291dCA8PCBxdWVyeShzZWdbYl0sIDAsIG4tMSwgYy0xLCBkLTEpIDw8IGVuZGw7CgkJfQoJfQogCglyZXR1cm4gMDsKfQ==