#include<bits/stdc++.h>
#define PII pair<int,int>
#define PLL pair<long long,long long>
#define mkp() make_pair()
#define pbk() push_back()
#define umap unordered_map
#define ls (x<<1)
#define rs (x<<1|1)
#define lson l,mid,x<<1
#define rson mid+1,r,x<<1|1
#define lowbit(x) x&(-x)
#define debug() cout<<"$\n"
typedef long long ll;
const int N=2e5+5,INF=0x3f3f3f3f;
using namespace std;
int read()
{
int f=1,x=0;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}
return f*x;
}
void write(int x)
{
if(x<0)
putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
void print(int x)
{
write(x);
putchar('\n');
}
int n,m;
ll belong[N],st[N],ed[N],tag[N];
ll a[N],sum[N];
void init()
{
int cnt=sqrt(n*1.0);
int num=n/cnt;
if(n%cnt) num++;
for(int i=1;i<=num;i++)
{
st[i]=(i-1)*cnt+1;
ed[i]=i*cnt;
}
ed[num]=n;
for(int i=1;i<=num;i++)
{
for(int j=st[i];j<=ed[i];j++)
{
sum[i]+=a[j];
belong[j]=i;
}
}
}
void update(int l,int r,int k)
{
int p=belong[l],q=belong[r];
if(p==q)
{
sum[q]+=(r-l+1)*k;
for(int i=l;i<=r;i++)
a[i]+=k;
}
else
{
for(int i=l;i<=ed[p];i++)
a[i]+=k;
sum[p]+=(ed[p]-l+1)*k;
for(int i=p+1;i<=q-1;i++)
tag[i]+=k;
for(int i=st[q];i<=r;i++)
a[i]+=k;
sum[q]+=(r-st[q]+1)*k;
}
}
ll query(int l,int r)
{
ll res=0;
int p=belong[l],q=belong[r];
if(p==q)
{
for(int i=l;i<=r;i++)
res+=a[i];
res+=(r-l+1)*tag[p];
}
else
{
for(int i=l;i<=ed[p];i++)
res+=a[i];
res+=(ed[p]-l+1)*tag[p];
for(int i=p+1;i<=q-1;i++)
res+=sum[i]+(ed[i]-st[i]+1)*tag[i];
for(int i=st[q];i<=r;i++)
res+=a[i];
res+=(r-st[q]+1)*tag[p];
}
return res;
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
a[i]=read();
init();
while(m--)
{
int op=read();
if(op==1)
{
int l=read(),r=read(),k=read();
update(l,r,k);
}
if(op==2)
{
int k=read();
update(1,1,k);
}
if(op==3)
{
int k=read();
update(1,1,-k);
}
if(op==4)
{
int l=read(),r=read();
print(query(l,r));
}
if(op==5)
print(query(1,1));
}
return 0;
}