#include<bits/stdc++.h>
using ll = long long;
#define endl '\n'
struct node{
int l,r;
ll val;
};
std::vector<node> t;
std::vector<ll> v;
int n;
void modify(int p,int x,int y){
if(t[p].l==t[p].r){
t[p].val=y;
return;
}
int mid=(t[p].l+t[p].r)/2;
if(x<=mid)modify(p*2,x,y);
else modify(p*2+1,x,y);
t[p].val=t[p*2].val+t[p*2+1].val;
}
void build(int p=1,int l=1,int r=n){
t[p].l=l,t[p].r=r;
if(l==r){
t[p].val=v[l];
return;
}
int mid=(l+r)/2;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
t[p].val=t[p*2].val+t[p*2+1].val;
}
ll query(int p,int l,int r){
if(t[p].r<l||t[p].l>r){
return 0;
}
if(t[p].l>=l&&t[p].r<=r){
return t[p].val;
}
int mid=(t[p].l+t[p].r)/2;
return query(p*2,l,r)+query(p*2+1,l,r);
}
signed main(){
std::ios::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int tt;
std::cin>>tt;
while(tt--){
int q;
std::cin>>n>>q;
v.assign(n+1,0);
t.assign(((n+2)<<2),{0,0,0});
for(int i=1;i<=n;i++){
std::cin>>v[i];
}
build();
while(q--){
int a,b,c;
std::cin>>a>>b>>c;
if(a==1){
modify(1 ,b,c);
}else{
std::cout<<query(1,b,c-1)-query(1,c,c)<<endl;
}
}
} }
全部评论
(0) 回帖