#include<bits/stdc++.h>
using namespace std;
long long c1[200001],c2[200001],a[200001],d[200001],n,m,cz,x,y,k,wz;
int lowbit(int x){
return x&(-x);
}
void updata(int x,int k){
for(int i=x;i<=n;i+=lowbit(i)){
c1[i]+=k;
c2[i]+=1ll*k*x;
}
}
long long int getsum(int x){
long long int ans=0;
while(x){
ans+=c1[x];
x-=lowbit(x);
}
return ans;
}
long long int getsum2(int x){
long long int ans=0;
while(x){
ans+=c2[x];
x-=lowbit(x);
}
return ans;
}
long long int Getsum(int x){
long long int ans=getsum(x);
ans*=(x+1);
return ans-getsum2(x);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
d[i]=a[i]-a[i-1];
updata(i,d[i]);
}
for(int i=1;i<=m;i++){
cin>>cz;
if(cz==1){
scanf("%d%d%d",&x,&y,&k);
updata(x,k);
updata(y+1,-k);
}
if(cz==2){
scanf("%d",&k);
updata(1,k);
updata(2,-k);
}
if(cz==3){
scanf("%d",&k);
updata(1,-k);
updata(2,k);
}
if(cz==4){
scanf("%d%d",&x,&y);
printf("%lld\n",Getsum(y)-Getsum(x-1));
}
if(cz==5){
printf("%lld\n",getsum(1));
}
}
return 0;
}
求助大佬