#include<iostream>
using namespace std;
#define ll long long
const int N=500005;
ll t[N];
int n,m;
ll lowbit(ll x){
return (x&(-x));
}
void update(ll x,ll k){//单点修改
/*
区间修改需要调用
update(L,k);
update(R+1,-k);
*/
for(ll i=x;i<=n;i+=lowbit(i)){
t[i]+=k;
}
}
ll ask1(ll pos){//单点查询
ll sum=0;
for(ll i=pos;i;i-=lowbit(i)){
sum+=t[i];
}
return sum;
}
ll ask(ll L,ll R){//区间查询
ll sum=0;
for(ll i=L-1;i;i-=lowbit(i)){
sum-=t[i];
}
for(ll i=R;i;i-=lowbit(i)){
sum+=t[i];
}
return sum;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
ll x;
cin>>x;
update(i,x);
}
while(m--){
ll op,x,y;
cin>>op>>x>>y;
if(op==1){
update(x,y);
}
else {
cout<<ask(x,y)<<endl;
}
}
}
树状数组--模板及其例题
于 2023-09-05 19:38:43 首次发布