#include<iostream>
using namespace std;
int m,n,x,y,k;
int a[10005],num[40005],addv[40005];
void build(int o,int L,int R){
if(L==R){
num[o]=a[L];
return;
}
int mid=(L+R)/2;
build(o*2,L,mid);
build(o*2+1,mid+1,R);
num[o]=num[o*2]+num[o*2+1];
}
void update(int o,int L,int R){
if(L>=x&&R<=y){
addv[o]+=k;
num[o]+=(x-y+1)*k;
return;
}
int mid=(L+R)/2;
build(o*2,L,mid);
build(o*2+1,mid+1,R);
num[o]=num[o*2]+num[o*2+1];
}
int query(int o,int L,int R){
if(L>=x&&R<=y){
return num[o];
}
int mid=(L+R)/2;
if(y<mid){
return query(o*2,L,mid)+addv[o];
}
else{
return query(o*2,mid+1,R)+addv[o];
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
cin>>a[i];
}
build(1,1,n);
int eq;
for(int i=0;i<m;++i){
cin>>eq;
if(eq==1){
cin>>x>>y>>k;
update(1,1,n);
}
else{
cin>>x;
y=x;
cout<<query(1,1,n)<<endl;
}
}
return 0;
}
满屏MLE 当场不解