rt,全RE,求调,感觉没啥大问题但就是RE了
#include<bits/stdc++.h>
using namespace std;
#define int long
#define in(l,r,le,ri) (((ri)<=(r))&&((l)>=(le)))
#define out(l,r,le,ri) (((l)>(ri))||((r)<(le)))
#define elif else if
int a[114514],w[114514*4],tag[114514*4];
void pushup(int u,int w[]){
w[u]=w[u*2]+w[u*2+1];
}
void init(int u,int l,int r,int a[],int w[]){
if(l==r){
w[u]=a[l];return;
}
int m=l+r>>1ll;
init(u<<1ll,l,m,a,w),init((u<<1)+1ll,m+1ll,r,a,w);
pushup(u,w);
}
void make(int u,int l,int x,int tag[],int w[]){
tag[u]+=x;
w[u]+=x*l;
}
void pushdown(int u,int l,int r,int tag[],int w[]){
int m=l+r>>1ll;
make(u<<1ll,m-l+1,tag[u],tag,w),make((u<<1ll)+1ll,r-m,tag[u],tag,w);
tag[u]=0;
}
int query(int u,int L,int R,int l,int r,int tag[],int w[]){
if(in(L,R,l,r))return w[u];
elif(out(L,R,l,r))return 0;
else{
int m=L+R>>1;
pushdown(u,L,R,tag,w);
return query(u<<1ll,L,m,l,r,tag,w)+query((u<<1ll)+1ll,m+1ll,R,l,r,tag,w);
}
}
void update(int u,int L,int R,int l,int r,int x,int tag[],int w[]){
if(in(L,R,l,r))make(u,R-L+1ll,x,tag,w);
elif(out(L,R,l,r));
else{
int m=L+R>>1;
pushdown(u,L,R,tag,w);
update(u<<1ll,L,m,l,r,x,tag,w),update((u<<1ll)+1ll,m+1ll,R,l,r,x,tag,w);
pushup(u,w);
}
}
#undef int
int main(){
#define int long
int n,m;cin>>n>>m;
int a[n+1ll]={0},w[(n<<2)+1]={0},tag[(n<<2)+1]={0};
for(int i=0;i<n;i++)cin>>a[i+1];//!!!
init(1,1,n,a,w);
while(m--){
int t,x,y;
cin>>t>>x>>y;
if(t==1){
int k;cin>>k;
update(1,1,n,x,y,k,tag,w);
}
else{
cout<<query(1,1,n,x,y,tag,w)<<endl;
}
}
#undef int
}