只 AC 了#1
#include<cstdio>
using namespace std;
typedef long long ll;
const ll N=100005;
ll n,q,a[N];
ll tr[N*10];
struct kd{
ll k;
ll d;
}tag[N*10];
void build(ll id,ll s,ll t){
if (s==t){
tr[id]=a[s];
return ;
}
ll mid=s+t>>1;
build(id<<1,s,mid);
build(id<<1|1,mid+1,t);
tr[id]=tr[id<<1]+tr[id<<1|1];
return ;
}
void pd(ll id,ll s,ll t){
ll l=id<<1,r=id<<1|1;
ll mid=s+t>>1;
if (tag[id].k&&s!=t){
tag[l].k+=tag[id].k;
tag[l].d+=tag[id].d;
tag[r].k+=tag[id].k+(mid-s+1)*tag[id].d;
tag[r].d+=tag[id].d;
tr[l]+=(2*tag[l].k+(mid-s)*tag[l].d)*(mid-s+1)>>1;
tr[r]+=(2*tag[r].k+(t-mid-1)*tag[r].d)*(t-mid)>>1;
tag[id].k=0;
tag[id].d=0;
}
return ;
}
void add(ll id,ll l,ll r,ll s,ll t,ll k,ll d){
if (l<=s&&t<=r){
tag[id].k+=(s-l)*d+k;
tag[id].d+=d;
tr[id]+=(2*tag[id].k+(t-s)*d)*(t-s+1)>>1;
return ;
}
pd(id,s,t);
ll mid=s+t>>1;
if (l<=mid) add(id<<1,l,r,s,mid,k,d);
if (r>mid) add(id<<1|1,l,r,mid+1,t,k,d);
tr[id]=tr[id<<1|1]+tr[id<<1|1];
}
ll getans(ll id,ll p,ll s,ll t){
if (s==t&&s==p){
return tr[id];
}
pd(id,s,t);
ll mid=s+t>>1;
ll ans=0;
if (p<=mid) ans=getans(id<<1,p,s,mid);
else ans=getans(id<<1|1,p,mid+1,t);
return ans;
}
int main(){
freopen("P1438_2.in","r",stdin);
scanf("%lld%lld",&n,&q);
for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
build(1,1,n);
while (q--){
ll opt;
scanf("%lld",&opt);
if (opt==1){
ll l,r,k,d;
scanf("%lld%lld%lld%lld",&l,&r,&k,&d);
add(1,l,r,1,n,k,d);
}
else{
ll p;
scanf("%lld",&p);
printf("%lld\n",getans(1,p,1,n));
}
}
return 0;
}