社区讨论
这道题RE了三个点
P3374【模板】树状数组 1参与者 6已保存回复 13
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 13 条
- 当前快照
- 1 份
- 快照标识符
- @mi7w1b0j
- 此快照首次捕获于
- 2025/11/21 04:32 4 个月前
- 此快照最后确认于
- 2025/11/21 06:31 4 个月前
哪位大佬知道咋回事啊
CPP#include <iostream>
using namespace std;
#define MAX 500010
int a[MAX],sumv[MAX],v,n,m,p,pd,ql,qr,sum = 0;
int build_tree(int o,int l,int r){
int mid = l + (r - l) / 2;
if(l == r){
sumv[o] = a[l];
}else{
sumv[o] = build_tree(o * 2,l,mid) + build_tree(o * 2 + 1,mid + 1,r);
}
return sumv[o];
}
void query(int o,int l,int r){
int mid = l + (r - l) / 2;
if(ql <= l && qr >= r){
sum += sumv[o];
}else{
if(ql <= mid){
query(o * 2,l,mid);
}
if(qr > mid){
query(o * 2 + 1,mid + 1,r);
}
}
}
void update(int o,int l,int r){
int mid = l + (r - l) / 2;
if(l == r){
sumv[o] += v;
}else{
if(p <= mid){
update(o * 2,l,mid);
}
if(p > mid){
update(o * 2 + 1,mid + 1,r);
}
sumv[o] = sumv[o * 2] + sumv[o * 2 + 1];
}
}
int main(){
cin>>n;
cin>>m;
for(int i = 1;i <= n;i++){
cin>>a[i];
}
sumv[1] = build_tree(1,1,n);
while(m--){
int a,b;
cin>>pd>>a>>b;
if(pd == 1){
p = a;
v = b;
update(1,1,n);
}
if(pd == 2){
ql = a;
qr = b;
sum = 0;
query(1,1,n);
cout<<sum<<endl;
}
}
return 0;
}
回复
共 13 条回复,欢迎继续交流。
正在加载回复...