#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
int a[500001];
int b[500001];
int c[500001];
int t[2][500001];
int n,m;
int lowbit(int x){
return (x&(-x));
}
int add(int x,int y,int k){
for(int i=x;i<=n;i+=lowbit(i))
t[k][i]+=y;
}
int sum(int k,int x){
int num=0;
for(int i=x;i>=1;i-=lowbit(i))
num+=t[k][i];
return num;
}
void upd(int l,int r,int x){
add(0,l,x);
add(0,r+1,-x);
add(1,l,l*x);
add(1,r+1,-(r+1)*x);
}
int ask(int n){
int a=sum(0,n);
int b=sum(1,n);
return (n+1)*a-b;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i]-a[i-1];
c[i]=c[i-1]+b[i];
t[0][i]=c[i]-c[i-lowbit(i)];
}
for(int i=1;i<=n;i++){
c[i]=c[i-1]+i*b[i];
t[1][i]=c[i]-c[i-lowbit(i)];
}
for(int i=1;i<=m;i++){
int d;
cin>>d;
if(d==1){
int x,y,k;
cin>>x>>y>>k;
upd(x,y,k);
}else{
int x,y;
cin>>x>>y;
cout <<ask(y)-ask(x-1)<<endl;
}
}
return 0;
}