rt
#include<bits/stdc++.h>
#define ll long long
#define R register
using namespace std;
const int N=1e5+5;
ll n,m,a[N];
struct edge{//单点修改,区间加,区间求和
ll val,tag;
}tr[N<<3];
inline void build(int p,int l,int r){
if(l==r){
tr[p].val=a[l]-a[l-1];return;
}
int mid=l+r>>1;build(p<<1,l,mid);build(p<<1|1,mid+1,r);
tr[p].val=tr[p<<1].val+tr[p<<1|1].val;
}
inline void pushdown(int p,int l,int r){
int mid=l+r>>1;
if(tr[p].tag){
tr[p<<1].tag+=tr[p].tag;
tr[p<<1].val+=tr[p].tag*(mid-l+1);
tr[p<<1|1].tag+=tr[p].tag;
tr[p<<1|1].val+=(r-mid)*tr[p].tag;
tr[p].tag=0;
}
}
inline void update_x(int l,int r,int s,int t,int p,ll k){
if(l<=s&&t<=r){
tr[p].tag+=k;tr[p].val+=tr[p].tag*(t-s+1);
return;
}
pushdown(p,s,t);
int mid=s+t>>1;
if(mid>=l)update_x(l,r,s,mid,p<<1,k);
if(mid<r)update_x(l,r,mid+1,t,p<<1|1,k);
tr[p].val=tr[p<<1].val+tr[p<<1|1].val;
}
inline ll query(int l,int r,int s,int t,int p){
if(l<=s&&t<=r)return tr[p].val;
ll sum=0;int mid=s+t>>1;
pushdown(p,s,t);
if(mid>=l)sum+=query(l,r,s,mid,p<<1);
if(mid<r)sum+=query(l,r,mid+1,t,p<<1|1);
return sum;
}
int main(){
// freopen("1.in","r",stdin);freopen("1.out","w",stdout);
ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
cin>>n>>m;
for(R int i=1;i<=n;++i)cin>>a[i];
build(1,1,n);
while(m--){
int op;
cin>>op;
if(op&1){
ll l,r,k,d;cin>>l>>r>>k>>d;
update_x(l,l,1,n,1,k);
if(l<r)update_x(l+1,r,1,n,1,d);
if(r+1<=n)update_x(r+1,r+1,1,n,1,-(k+(r-l)*d));
}else{
int x;cin>>x;
cout<<query(1,x,1,n,1)<<'\n';
}
}
return 0;
}
```cpp