差分怎么求区间和,用的树状数组,但是查询不知道怎么写
#include<bits/stdc++.h>
using namespace std;
int n,m,x,x1,y,z;
int a[100010],d[100010];
int lowbit(int num){return num&-num;}
void add(int x,int y){
while(x<=n) d[x]+=y,x+=lowbit(x);
return;
}
int get(int x){
int ans=0;
while(x) ans+=d[x],x-=lowbit(x);
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i],add(i,a[i]-a[i-1]);
for(int i=1;i<=m;i++){
cin>>x;
if(x==1){
cin>>x1>>y>>z;
add(x1,z);
add(y+1,-z);
}else{
cin>>y>>z;
int ans1=0;
for(int j=y;j<=z;j++) ans1+=get(j);
cout<<ans1<<endl;
}
}
return 0;
}