0分求调
查看原帖
0分求调
1200401
wnqnld_llx楼主2024/11/10 10:22
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+1;
int w[N];
struct tree{
	int l,r,sum;
}tr[N*4];
void build(int fa,int l,int r){
	tr[fa].l=l,tr[fa].r=r;
	if(l==r){
		tr[fa].sum=tr[fa].l;
		return ;
	}
	int mid=(l+r)/2;
	build(fa*2,l,mid);
	build(fa*2+1,mid+1,r);
	tr[fa].sum=tr[fa*2].sum+tr[fa*2+1].sum;
}
void updata(int fa,int x,int k){
	if(tr[fa].l==x&&tr[fa].r==x){
		tr[fa].sum+=k;
		return ;
	}
	int mid=(tr[fa].l+tr[fa].r)/2;
	if(x<=mid){
		updata(fa*2,x,k);
	}
	else{
		updata(fa*2+1,x,k);
	}
	tr[fa].sum=tr[fa*2].sum+tr[fa*2+1].sum;
}
int query(int fa,int x,int y){
	if(tr[fa].l>=x&&tr[fa].r<=y){
		return tr[fa].sum;
	}
	int mid=(tr[fa].l+tr[fa].r)/2,sum=0;
	if(x<=mid){
		sum+=query(fa*2,x,y);
	}
	if(y>mid){
		sum+=query(fa*2+1,x,y);
	}
	return sum;
}
signed main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>w[i];
	build(1,1,n);
	while(m--){
		int id;
		cin>>id;
		if(id==1){
			int x,k;
			cin>>x>>k;
			updata(1,x,k);
		}
		else{
			int x,y;
			cin>>x>>y;
			cout<<query(1,x,y)<<"\n";
		}
	}
	return 0;
}
2024/11/10 10:22
加载中...