Code:
#include<bits/stdc++.h>
#define reg register
using namespace std;
const int N = 5e4+10;
int n,len,qs,pos[N],l[310],r[310],a[N],add[310];
int op,x,y,c;
void Add(int zl,int zr,int v) {
if (pos[zl]==pos[zr]) {
for (reg int i=zl;i<=zr;++i) a[i]+=v;
return;
}
for (reg int i=zl;i<=l[pos[zl]];++i) a[i]+=v;
for (reg int i=pos[zl]+1;i<pos[zr];++i) add[i]+=v;
for (reg int i=l[pos[zr]];i<=zr;++i) a[i]+=v;
return;
}
int main(){
scanf("%d",&n);
for (reg int i=1;i<=n;++i) scanf("%d",&a[i]);
len=sqrt(n);
for (reg int i=1;i<=len;++i) l[i]=r[i-1]+1,r[i]=l[i]+len-1;
if (len*len<n) qs=len+1,l[qs]=r[len]+1,r[qs]=n;
for (reg int i=1;i<=qs;++i) {
for (reg int j=l[i];j<=r[i];++j) pos[j]=i;
}
for (reg int i=1;i<=n;++i) {
scanf("%d %d %d %d",&op,&x,&y,&c);
if (op==0) Add(x,y,c);
else printf("%d\n",a[y]+add[pos[y]]);
}
return 0;
}