rt
#include <bits/stdc++.h>
using namespace std;
//线段树
const int N=1e5+10;
struct tre{
long long dat,tag;
}t[4*N];
int n,m;
long long nums[N];
int search(int l,int r,int x,int l_x,int r_x){
if(l<=l_x && r_x<=r) return t[x].dat;
int mid=(l_x+r_x)/2,ans=0;
//先下放懒标记
if(t[x].tag>0 && l_x!=r_x){
t[x*2].dat+=t[x].tag*(mid-l+1);
t[x*2+1].dat+=t[x].tag*(r-(mid+1)+1);
t[x*2].tag+=t[x].tag;
t[x*2+1].tag+=t[x].tag;
t[x].tag=0;
}
if(mid>=l){//与左儿子的区间有相交
ans+=search(l,r,2*x,l_x,mid);
}
if(mid+1<=r){//与右儿子的区间有相交
ans+=search(l,r,2*x+1,mid+1,r_x);
}
return ans;
}
void build(int x,int l,int r){
if(l==r){//找到叶子节点
t[x].dat=nums[l];
return ;
}
int mid=(l+r)/2;
build(x*2,l,mid);
build(x*2+1,mid+1,r);
t[x].dat=t[x*2].dat+t[x*2+1].dat;
}
void add(int l,int r,int x,int l_x,int r_x,int num){
int ans=0;
if(l<=l_x && r_x<=r){//能完全覆盖
t[x].dat+=num*(r_x-l_x+1);
t[x].tag+=num;//打上懒标记
return ;
}
int mid=(l_x+r_x)/2;
if(mid>=l){//与左儿子的区间有相交
add(l,r,x*2,l_x,mid,num);
}
if(mid+1<=r){//与右儿子的区间有相交
add(l,r,x*2+1,mid+1,r_x,num);
}
t[x].dat=t[x*2].dat+t[x*2+1].dat;//用子节点来更新当前节点
}
int main(){
int a,b,c,d;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>nums[i];
build(1,1,n);
while(m--){
cin>>a;
if(a==1){
cin>>b>>c>>d;
add(b,c,1,1,n,d);
}
else{
cin>>b>>c;
cout<<search(b,c,1,1,n)<<endl;
}
}
return 0;
}
/*
常年做数据结构的人大都目光呆滞,极度自卑,且智商逐年下降,最后完全沦为傻子。
做数据结构会破环身体结构,引发各种不治之症。人一旦开始做数据结构就说明这个人的智慧品行样貌通通都是下等,这辈子只能在阴沟里苟延残喘。
做数据结构的人具有强烈的反社会倾向,对治安稳定造成破坏,危害正常人的生命。
*/