@little_zxh_qwq
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[114514];
int sgt[414514];
int lc[414514],rc[414514];
int tag[414514];
int build(int l,int r,int i){
lc[i]=l;
rc[i]=r;
if(l==r){
sgt[i]=a[l];
return a[l];
}
int m=(l+r)>>1;
sgt[i]=build(l,m,i<<1)+build(m+1,r,(i<<1)|1);
return sgt[i];
}
void pushdown(int l,int r,int i,int x){
if(l==lc[i]&&r==rc[i]){
tag[i]+=(r-l+1)*x;
sgt[i]+=tag[i];
return;
}
int m=rc[i*2];
if(l<=m){
pushdown(l,m,i<<1,x);
}
if(r>=m+1){
pushdown(m+1,r,(i<<1)|1,x);
}
}
int query(int l,int r,int i){
if(l==lc[i]&&r==rc[i]){
return sgt[i];
}
int m=rc[i*2];
if(tag[i]){
sgt[i]+=tag[i];
pushdown(lc[i<<1],rc[i<<1],i<<1,tag[i]/(rc[i]-lc[i]+1));
pushdown(lc[(i<<1)|1],rc[(i<<1)|1],(i<<1)|1,tag[i]/(rc[i]-lc[i]+1));
tag[i]=0;
}
int sum=0;
if(l<=m){
sum+=query(l,m,i<<1);
}
if(r>=m+1){
sum+=query(m+1,r,(i<<1)|1);
}
return sum;
}
main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int t=build(1,n,1);
for(int i=1;i<=m;i++){
int op,l,r;
cin>>op>>l>>r;
if(op==1){
int x;
cin>>x;
pushdown(l,r,1,x);
}
else{
cout<<query(l,r,1)<<endl;
}
}
for(int i=1;i<=n*4;i++){
cout<<i<<" "<<lc[i]<<" "<<rc[i]<<" "<<tag[i]<<" "<<sgt[i]<<endl;
}
}