最基础树状数组

1.单点加
2.前缀和查询

int n, m;
int a[N];
int tr[N];
int lowbit(int x){
	return x&(-x);
}
void add(int pos,int k){
	for(int i=pos;i<=n;i+=lowbit(i))tr[i]+=k;
}
int query(int x){
	int res=0;
	for(int i=x;i;i-=lowbit(i))res+=tr[i];
	return res;
}
void solve(){
	cin>>n;cin>>m;
	for(int i=1;i<=n;i++){
	int x;cin>>x;
	add(i,x);
	}
	while(m--){
		int op;cin>>op;
		if(op==1){
			int pos,val;cin>>pos>>val;
			add(pos,val);
		}
		else {
			int l,r;cin>>l>>r;
			cout<<query(r)-query(l-1)<<endl;
		}
	}
}
posted @ 2024-03-20 22:31  potential-star  阅读(1)  评论(0编辑  收藏  举报