不理解,这串代码用的是树状数组来进行区间修改和区间求和,但提交就编译错误了,来个佬看一下
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 500010
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define int long long
int tr1[MAXN],tr2[MAXN];
int w[MAXN],n,m;
inline lowbit(int x){
return x&-x;
}
void add(int tre[],int x,int v){
for(int i=x;i<=n;i+=lowbit(i))tre[i]+=v;
}
int ask(int tre[],int x){
int ans=0;
for(int i=x;i;i-=lowbit(i))ans+=tre[i];
return ans;
}
int psum(int x){
return ask(tr1,x)*(x+1)-ask(tr2,x);
}
signed main(){
ios;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>w[i];
int d=w[i]-w[i-1];
add(tr1,i,d);
add(tr2,i,d*i);
}
while(m--){
int op,x,y,k;
cin>>op;
if(op==1){
cin>>x>>y>>k;
add(tr1,x,k);
add(tr1,y+1,-k);
add(tr2,x,k*x);
add(tr2,y+1,-(y+1)*x);
}else {
cin>>x>>y;
cout<<psum(y)-psum(x-1)<<endl;
}
}
return 0;
}