// Implicit segment tree , support range update [L-R] and point query.
// Also handle queries when intitially array is emmpty , and 1 <= L , R <= 1e9
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct Implicit_segment_tree {
ll Sum;
Implicit_segment_tree *left , *right;
Implicit_segment_tree(ll _Sum , Implicit_segment_tree *_left , Implicit_segment_tree *_right ){
Sum = _Sum;
left = _left;
right = _right;
}
};
void update(Implicit_segment_tree *root , int l , int r , int s , int e , ll value ){
if(s > r || l > e )
return;
if(l >= s && r <= e ){
root->Sum += value;
return;
}
if(root->left == NULL)
root->left = new Implicit_segment_tree(0 , NULL , NULL);
if(root->right == NULL)
root->right = new Implicit_segment_tree(0 , NULL , NULL);
update(root->left , l , (l + r)/2 , s , e , value );
update(root->right , (l + r)/2 + 1 , r , s, e , value);
}
ll query(Implicit_segment_tree *root , int l , int r, int idx) {
if( root == NULL || idx > r || l > idx )
return 0;
if( l == r )
return root->Sum;
return root->Sum + query(root->left , l , ( l + r)/2 , idx) + query( root->right , (l + r)/2 + 1 , r, idx);
}
int main() {
int N , Q;
scanf("%d%d",&N,&Q);
Implicit_segment_tree *root = new Implicit_segment_tree(0 , NULL, NULL);
for(int i = 1 ; i <= N ; ++i ){
int x;
scanf("%d",&x);
update(root , 1 , N , i , i , x );
}
while(Q--){
int choice;
scanf("%d",&choice); // choice 1 for update , 2 for query at index x
if(choice == 1){
int L , R , value;
scanf("%d%d%d",&L,&R,&value);
update(root, 1 , N , L , R , value );
} else {
int idx;
scanf("%d",&idx);
printf("%lld\n",query(root, 1 , N , idx));
}
}
return 0;
}
Ly8gSW1wbGljaXQgc2VnbWVudCB0cmVlICwgICBzdXBwb3J0ICByYW5nZSB1cGRhdGUgW0wtUl0gYW5kIHBvaW50IHF1ZXJ5LgoKLy8gQWxzbyBoYW5kbGUgcXVlcmllcyB3aGVuICBpbnRpdGlhbGx5IGFycmF5IGlzIGVtbXB0eSAsICBhbmQgMSA8PSBMICwgUiA8PSAxZTkKCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEltcGxpY2l0X3NlZ21lbnRfdHJlZSB7CiAgICBsbCBTdW07CglJbXBsaWNpdF9zZWdtZW50X3RyZWUgKmxlZnQgLCAqcmlnaHQ7CiAgICBJbXBsaWNpdF9zZWdtZW50X3RyZWUobGwgX1N1bSAsIEltcGxpY2l0X3NlZ21lbnRfdHJlZSAqX2xlZnQgLCBJbXBsaWNpdF9zZWdtZW50X3RyZWUgKl9yaWdodCApewogICAgU3VtID0gX1N1bTsKICAgIGxlZnQgPSBfbGVmdDsKICAgIHJpZ2h0ID0gX3JpZ2h0OwogICAgfQp9OwoKdm9pZCB1cGRhdGUoSW1wbGljaXRfc2VnbWVudF90cmVlICpyb290ICwgaW50IGwgLCBpbnQgciAsIGludCBzICwgaW50IGUgLCBsbCB2YWx1ZSApewogICAgICAgaWYocyA+IHIgfHwgbCA+IGUgKQogICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYobCA+PSBzICYmIHIgPD0gZSApewogICAgICAgICAgICByb290LT5TdW0gKz0gdmFsdWU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZihyb290LT5sZWZ0ID09IE5VTEwpCiAgICAgICAgIHJvb3QtPmxlZnQgPSBuZXcgSW1wbGljaXRfc2VnbWVudF90cmVlKDAgLCBOVUxMICwgTlVMTCk7CiAgICAgICAgIGlmKHJvb3QtPnJpZ2h0ID09IE5VTEwpCiAgICAgICAgIHJvb3QtPnJpZ2h0ID0gbmV3IEltcGxpY2l0X3NlZ21lbnRfdHJlZSgwICwgTlVMTCAsIE5VTEwpOwogICAgICAgICB1cGRhdGUocm9vdC0+bGVmdCAsIGwgLCAobCArIHIpLzIgLCBzICwgZSAsIHZhbHVlICk7CiAgICAgICAgIHVwZGF0ZShyb290LT5yaWdodCAsIChsICsgcikvMiArIDEgLCByICwgcywgZSAsIHZhbHVlKTsKfQoKbGwgcXVlcnkoSW1wbGljaXRfc2VnbWVudF90cmVlICpyb290ICwgaW50IGwgLCBpbnQgciwgaW50IGlkeCkgewoJIGlmKCByb290ID09IE5VTEwgfHwgIGlkeCA+IHIgfHwgbCA+IGlkeCApCgkgIHJldHVybiAwOwoJICBpZiggbCAgPT0gciApCgkgIHJldHVybiByb290LT5TdW07CglyZXR1cm4gcm9vdC0+U3VtICsgcXVlcnkocm9vdC0+bGVmdCAsIGwgLCAoIGwgKyByKS8yICwgaWR4KSArIHF1ZXJ5KCByb290LT5yaWdodCAsIChsICsgcikvMiArIDEgLCByLCBpZHgpOwp9CgoKaW50IG1haW4oKSB7CiAgICAgICAgICAgICAgICAgIGludCBOICwgUTsKICAgICAgICAgICAgICAgICAgICBzY2FuZigiJWQlZCIsJk4sJlEpOwogICAgICAgICAgICAgICAgICAgICAgSW1wbGljaXRfc2VnbWVudF90cmVlICpyb290ID0gbmV3IEltcGxpY2l0X3NlZ21lbnRfdHJlZSgwICwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAxIDsgaSA8PSBOIDsgKytpICl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuZigiJWQiLCZ4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUocm9vdCAsIDEgLCBOICwgaSAsIGkgLCB4ICk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgd2hpbGUoUS0tKXsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNob2ljZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlZCIsJmNob2ljZSk7ICAgICAgICAgICAgICAgICAgICAgLy8gY2hvaWNlIDEgIGZvciB1cGRhdGUgLCAyIGZvciBxdWVyeSBhdCBpbmRleCB4CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNob2ljZSA9PSAxKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBMICwgUiAsIHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVkJWQlZCIsJkwsJlIsJnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlKHJvb3QsIDEgLCBOICwgTCAsIFIgLCB2YWx1ZSApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwmaWR4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJWxsZFxuIixxdWVyeShyb290LCAxICwgTiAsIGlkeCkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgIHJldHVybiAwOwp9