两种树状数组

单点修改,区间查询树状数组,洛谷P3374

#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n, m, a[N];
int query(int x){
	int ans = 0;
	for(; x; x -= x & -x) ans += a[x]; 
	return ans;
}
void modify(int x, int d){
	for(; x <= N; x += x & -x) a[x] += d;
	return;
}
int main(){
	int f, x, y;
	cin >> n >> m;
	for(int i = 1; i <= n; i++){
		cin >> x;
		modify(i,x);	
	}
	while(m--){
		cin >> f >> x >> y;
		if(f == 1) modify(x, y);
		if(f == 2){
			cout << query(y) - query(x-1) << endl;
		}
	}
	return 0;
}

区间修改,单点查询树状数组,洛谷P3368

把上面那个改成在原数组差分数组上做

posted @ 2025-10-17 23:00  Turkey_VII  阅读(25)  评论(0)    收藏  举报