两种树状数组
单点修改,区间查询树状数组,洛谷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
把上面那个改成在原数组差分数组上做

浙公网安备 33010602011771号