#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,a[800005],d[800005],b[800005];
void build(ll l,ll r,ll p){
if(l==r){
d[p]=a[l];
return ;
}
ll k=l+((r-l)>>1);
build(l,k,(p<<1)),build(k+1,r,((p<<1)|1));
d[p]=d[(p<<1)]+d[((p<<1)|1)];
}
void update(ll l,ll r,ll s,ll t,ll k,ll p){
if(l>r) return ;
if(l<=s&&t<=r){
d[p]+=(t-s+1)*k,b[p]+=k;
return ;
}
ll i=s+((t-s)>>1);
if(b[p]) d[(p<<1)]+=(i-s+1)*b[p],d[((p<<1)|1)]+=(t-i)*b[p],b[(p<<1)]+=b[p],b[((p<<1)|1)]+=b[p];
b[p]=0;
if(i>=l) update(l,r,s,i,k,(p<<1));
if(r>i) update(l,r,i+1,t,k,((p<<1)|1));
d[p]=d[(p<<1)]+d[((p<<1)|1)];
}
ll sum(ll l,ll r,ll s,ll t,ll p){
if(l>r) return 0;
if(l<=s&&t<=r) return d[p];
ll i=s+((t-s)>>1);
if(b[p]) d[(p<<1)]+=(i-s+1)*b[p],d[((p<<1)|1)]+=(t-i)*b[p],b[(p<<1)]+=b[p],b[((p<<1)|1)]+=b[p];
b[p]=0;
ll he=0;
if(i>=l) he=sum(l,r,s,i,(p<<1));
if(r>i) he+=sum(l,r,i+1,t,((p<<1)|1));
return he;
}
int main(){
scanf("%lld%lld",&n,&m);
for(int i=0;i<n;i++) scanf("%lld",&a[i]);
build(1,n-1,1);
while(m--){
ll op,x,y,k;
scanf("%lld",&op);
if(op==1){
scanf("%lld %lld %lld",&x,&y,&k),update(x,y-1,1,n-1,k,1);
if(x==1) a[0]+=k;
}
else if(op==2) scanf("%lld",&x),a[0]+=x;
else if(op==3) scanf("%lld",&x),a[0]-=x;
else if(op==4) scanf("%lld%lld",&x,&y),printf("%lld\n",sum(x,y-1,1,n-1,1)+(x==1?a[0]:0));
else printf("%lld\n",a[0]);
}
return 0;
}
将主墓单独拉出来判断,样例能过