kkkkks03 @ 2024-12-05 20:06:36
#include<bits/stdc++.h>
using namespace std;
long long tree[414514],n,m,a[114541];
long long lasy[414514];
#define ll long long
inline void build(ll l,ll r,ll p){
lasy[p]=0;
if(l==r){
tree[p]=a[l];
return ;
}
ll mid=(l+r)>>1;
build(l,mid,p<<1);
build(mid+1,r,p<<1|1);
tree[p]=tree[p<<1]+tree[p<<1|1];
}
inline void ch(ll p,ll l,ll r,ll k){
tree[p]+=k*(r-l+1);
lasy[p]+=k;
}
inline void pd(ll p,ll l,ll r){
ll mid=(l+r)>>1;
ch(p<<1,l,mid,lasy[p]);
ch(p<<1|1,mid+1,r,lasy[p]);
lasy[p]=0;
}
inline void data(ll l,ll r,ll x,ll y,ll p,ll k){
if(x<=l&&y>=r){
tree[p]+=k*(r-l+1);
lasy[p]+=k;
return ;
}
pd(p,l,r);
ll mid=(l+r)>>1;
if(mid>=x){
data(l,mid,x,y,p<<1,k);
}
if(mid<y){
data(mid+1,r,x,y,p<<1|1,k);
}
tree[p]=tree[p<<1]+tree[p<<1|1];
}
ll qqq(ll l,ll r,ll x,ll y,ll p){
ll mid=(l+r)>>1;
ll s=0;
if(x<=l&&y>=r){
return tree[p];
}
pd(p,l,r);
if(mid>=x){
s+=qqq(l,mid,x,y,p<<1);
}
if(mid<y){
s+=qqq(mid+1,r,x,y,p<<1|1);
}
return s;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,n,1);
for(int i=1;i<=m;i++){
int f,x,y,z;
cin>>f;
if(f==1){
cin>>x>>y>>z;
data(1,n,x,y,z,1);
}
else {
cin>>x>>y;
cout<<qqq(1,n,x,y,1)<<"\n";
}
}
return 0;
}