https://www.luogu.org/problem/show?pid=3374
用树状数组对单个数据操作,然后查询一段区间。
注意:对单个数据操作前应将初始值加入树状数组中。
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,a[500005],p,x,y,t[500005];
int lowbit(int x){
return x&-x;
}
void add(int x,int y){
while(x<=n){
t[x]+=y;
x+=lowbit(x);
}
}
int query(int x){
int sum=0;
while(x){
sum+=t[x];
x-=lowbit(x);
}
return sum;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
add(i,a[i]);
}
for (int i=1;i<=m;i++){
scanf("%d%d%d",&p,&x,&y);
if (p==1)
add(x,y);
else {
cout<<query(y)-query(x-1)<<endl;
}
}
return 0;
}