社区讨论
0分求条,油条闭关
P2068统计和参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mmizt1ni
- 此快照首次捕获于
- 2026/03/09 17:42 23 小时前
- 此快照最后确认于
- 2026/03/09 22:16 18 小时前
代码如下 WA 0pts```cpp
CPP#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,m;
struct Node{
int sum,l,r;
}tr[4*N];
int num[N];
void push_up(int x){
tr[x].sum=tr[x*2].sum+tr[x*2+1].sum;
}
void build(int x,int l,int r){
tr[x].l=l;
tr[x].r=r;
if(l==r){
tr[x].sum=num[l];
return ;
}
int mid=(l+r)/2;
build(2*x,l,mid);
build(2*x+1,mid+1,r);
push_up(x);
}
int query(int x,int l,int r){
if(tr[x].l>=l&&tr[x].r<=r) return tr[x].sum;
int mid=(tr[x].l+tr[x].r)/2;
int sum=0;
if(l<=mid) sum+=query(2*x,l,r);
if(r>mid) sum+=query(2*x+1,l,r);
return sum;
}
void change(int x,int p,int k){
if(tr[x].l==tr[x].r){
tr[x].sum+=k;
return ;
}
int mid=(tr[x].l+tr[x].r)/2;
if(p<=mid)change(2*x,p,k);
else change(2*x+1,p,k);
push_up(x);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>num[i];
}
build(1,1,n);
while(m--){
int k,b,c;
cin>>k>>b>>c;
if(k==1)change(1,b,c);
else cout<<query(1,b,c)<<"\n";
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...