不知道哪错了,求助。。。
#include<bits/stdc++.h>
#define ll long long
#define maxn 100005
using namespace std;
ll n,m,tr[maxn*4],a[maxn],add[maxn*4];
void Add(ll k,ll l,ll r,ll x){
add[k]+=x;
tr[k]+=(r-l+1)*x;
return;
}
void pushdown(ll k,ll l,ll r){
if(add[k]==0) return;
ll mid=l+r>>1;
Add(k<<1,l,mid,add[k]);
Add(k<<1|1,mid+1,r,add[k]);
add[k]=0;
}
void build(ll k,ll l,ll r){
if(l==r){
tr[k]=a[l];
return;
}
ll mid=l+r>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
tr[k]=tr[k<<1]+tr[k<<1|1];
}
void modify(ll k,ll l,ll r,ll x,ll y,ll v){
if(l>=x&&r<=y) Add(k,l,r,v);
ll mid=l+r>>1;
pushdown(k,l,r);
if(x<=mid) modify(k<<1,l,mid,x,y,v);
if(y>mid) modify(k<<1|1,mid+1,r,x,y,v);
tr[k]=tr[k<<1]+tr[k<<1|1];
}
ll query(ll k,ll l,ll r,ll x,ll y){
if(l>=x&&r<=y) return tr[k];
ll mid=l+r>>1,res=0;
pushdown(k,l,r);
if(x<=mid) res+=query(k<<1,l,mid,x,y);
if(mid<y) res+=query(k<<1|1,mid+1,r,x,y);
return res;
}
int main(){
cin>>n>>m;
for(ll i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
while(m--){
int num,x,y,k;
cin>>num;
if(num==1){
cin>>x>>y>>k;
modify(1,1,n,x,y,k);
}
else{
cin>>x>>y;
cout<<query(1,1,n,x,y)<<"\n";
}
}
return 0;
}