社区讨论
蒟蒻的发问--爆零
P3372【模板】线段树 1参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lobjaqy0
- 此快照首次捕获于
- 2023/10/29 21:56 2 年前
- 此快照最后确认于
- 2023/11/04 03:00 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
struct tree{
int num,l,r;
};
int in[500001];tree t[500001];
tree join(tree a,tree b){
tree c;
c.l=min(a.l,b.l);
c.r=max(a.r,b.r);
c.num=a.num+b.num;
}
void build(int i,int l,int r){
if(l==r){
t[i].num=in[l];
return ;
}
int mid=(l+r)/2;
build(i*2,l,mid);build(i*2+1,mid+1,r);
t[i]=join(t[i*2],t[i*2+1]);
}
long long ans=0;
void add(int i,int l,int r,int k){
if(t[i].l>=l&&t[i].r<=r){
t[i].num+=k;
return ;
}
if(t[i*2].r>=l)
add(i*2,l,r,k);
if(t[i*2+1].l<=r)
add(i*2+1,l,r,k);
}
long long search(int i,int dis){
ans+=t[i].num;
if(t[i].l==t[i].r)
return ans;
if(dis<=t[i*2].r)
search(i*2,dis);
if(dis>=t[i*2+1].l)
search(i*2+1,dis);
return ans;
}
int main(){int m,n;
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>in[i];
}
build(1,1,n);
for(int i=1;i<=m;i++){
int a,b,c,d;
cin>>a;
if(a==1){cin>>b>>c>>d;
add(1,b,c,d);}
else {
cin>>b>>c;cout<<search(b,c);}
}
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...