#include<bits/stdc++.h>
#define il inline
#define re register
using namespace std;
typedef long long ll;
const int N=2e5+10;
int n,m,a[N];
struct T
{
int l,r;
ll K,D;
}t[N<<2];
il void build(re int p,re int l,re int r)
{
t[p].l=l;
t[p].r=r;
t[p].K=t[p].D=0;
if(l==r)
{
t[p].K=a[l];
return ;
}
re int mid=(l+r)>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
}
il void pushdown(re int p)
{
if(t[p].K)
{
t[p<<1].K+=t[p].K;
t[p<<1].D+=t[p].D;
t[p<<1|1].K+=t[p].K+t[p].D*(t[p<<1|1].l-t[p].l);
t[p<<1|1].D+=t[p].D;
t[p].K=t[p].D=0;
}
}
il void modify(re int p,re int l,re int r,re int K,re int D)
{
if(l<=t[p].l&&t[p].r<=r)
{
t[p].K+=K+D*(t[p].l-l);
t[p].D+=D;
return ;
}
pushdown(p);
re int mid=(t[p].l+t[p].r)>>1;
if(l<=mid) modify(p<<1,l,r,K,D);
if(r>mid) modify(p<<1|1,l,r,K,D);
}
il ll query(re int p,re int x)
{
if(t[p].l==t[p].r&&t[p].l==x)
{
return t[p].K;
}
pushdown(p);
re int mid=(t[p].l+t[p].r)>>1;
if(x<=mid) return query(p<<1,x);
return query(p<<1|1,x);
}
int main()
{
scanf("%d%d",&n,&m);
for(re int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
build(1,1,n);
for(re int i=1;i<=m;i++)
{
re int opt;
scanf("%d",&opt);
if(opt==1)
{
re int l,r,K,D;
scanf("%d%d%d%d",&l,&r,&K,&D);
modify(1,l,r,K,D);
}
else
{
re int p;
scanf("%d",&p);
printf("%lld\n",query(1,p));
}
}
return 0;
}
思路如果有问题请指教。