70分求调
查看原帖
70分求调
906916
Contain_Thunder楼主2024/1/26 16:43

差分怎么求区间和,用的树状数组,但是查询不知道怎么写

#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;
}

2024/1/26 16:43
加载中...