Link to this code: https://cses.fi/paste/6807f75057156ab41189d28/
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define endl '\n'
#define fast_io ios::sync_with_stdio(false); cin.tie(nullptr);

const int M = 1e9+7;
const int INF = 1e18;
const int N = 2e5+1;

vector<int> arr(N);
vector<int> sgmt(4*N);
vector<int> lazy(4*N);

int leftChild(int idx) {
    return idx<<1;
}

int rightChild(int idx) {
    return idx<<1 | 1;
}

void build(int s, int e, int idx){
    if(s==e){
        sgmt[idx] = arr[s];
        return;
    }
    int mid = s+ (e-s)/2;
    build(s,mid,leftChild(idx));
    build(mid+1,e,rightChild(idx));
    sgmt[idx] = sgmt[leftChild(idx)] + sgmt[rightChild(idx)];
}


void push(int s, int e, int idx){
    if(s==e || lazy[idx]==0) return;

    int mid = s + (e-s)/2;
    int lele = mid - s + 1;
    int rele = e - mid - 1 + 1;
    sgmt[leftChild(idx)] += lazy[idx]*lele;
    lazy[leftChild(idx)] += lazy[idx];
    sgmt[rightChild(idx)] += lazy[idx]*rele;
    lazy[rightChild(idx)] += lazy[idx];

    lazy[idx] = 0;
}
void update(int s, int e, int idx, int l, int r, int delta){
    if(r<s || e<l) return;

    if(l<=s && e<=r){
        sgmt[idx] += delta*(e-s+1);
        lazy[idx] += delta;
        return;
    }
    push(s,e,idx);
    int mid = s + (e-s)/2;
    update(s, mid, leftChild(idx), l, r, delta);
    update(mid+1, e, rightChild(idx), l, r, delta);

    sgmt[idx] = sgmt[leftChild(idx)] + sgmt[rightChild(idx)];
}

void query(int s, int e, int idx, int i){
    if(s==e){
        cout << sgmt[idx] << endl;
        return;
    } 
    
    int mid = s + (e-s)/2;
    push(s,e,idx);
    if(i<=mid){
        query(s, mid, leftChild(idx), i);
    }
    else{
        query(mid+1, e,rightChild(idx),i);
    }
}

void solve(){ 
    int n,q;cin>>n>>q;
    for(int i=0;i<n;i++) cin>>arr[i];
    build(0,n-1,1);
    while(q--){
        int o;
        cin>>o;
        if(o==2){
            int i;cin>>i;
            query(0,n-1,1,i-1);
        }
        else{
            int l,r,d;cin>>l>>r>>d;
            update(0,n-1,1,l-1,r-1,d);
        }
    }
}

int32_t main() {
    fast_io;
    int t = 1;
    //cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}