社区讨论
求条(玄关)
P3374【模板】树状数组 1参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @m1w9z0l4
- 此快照首次捕获于
- 2024/10/05 22:54 去年
- 此快照最后确认于
- 2025/11/04 17:55 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
struct hns{
int l,r,n;
}d[500010*4];
int ans,n,m,a[500010];
void build(int l,int r,int p){
if(l==r){
d[p].l=l,d[p].r=r,d[p].n=a[r];
return;
}
int m=r+((r-l)>>1);
build(l,m,p*2);
build(m+1,r,p*2+1);
d[p].n=d[p*2].n+d[p*2+1].n,d[p].l=l,d[p].r=r;
return;
}
void check(int l,int r,int p){
if(d[p].l>=l && d[p].r<=r){
ans+=d[p].n;
return;
}
if(d[p*2].r>=l) check(l,r,p*2);
if(d[p*2+1].l<=r) check(l,r,p*2+1);
return;
}
void pls(int p,int x,int k){
d[p].n+=k;
if(d[p].l==d[p].r) return;
if(x<=d[p*2].r) pls(p*2,x,k);
if(x>=d[p*2+1].l) pls(p*2+1,x,k);
return;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>m;
for(int i=1; i<=n; i++){
cin>>a[i];
}
build(1,n,1);
for(int i=1; i<=m; i++){
int a;
cin>>a;
if(a==1){
int b,c;
cin>>b>>c;
pls(1,b,c);
}else{
int b,c;
cin>>b>>c;
ans=0;
check(1,b,c);
cout<<ans<<"\n";
}
}
return 0;
}
本人第一次写线段树,根本搞不清楚为什么会炸
回复
共 5 条回复,欢迎继续交流。
正在加载回复...