1 struct node 2 { 3 int lc,rc; 4 int sum; 5 node() 6 { 7 lc=rc=sum=0; 8 } 9 }; 10 node tree[maxn*5]; 11 inline int build(int l,int r) 12 { 13 int k=++cnt; 14 if(l==r) 15 { 16 tree[k].sum=num[l]; 17 return k; 18 } 19 int mid=(l+r)>>1; 20 tree[k].lc=build(l,mid); tree[k].rc=build(mid+1,r); 21 tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum; 22 return k; 23 }
1 inline int modify(int rt,int l,int r,int p,int v) 2 { 3 int new_rt=++cnt; 4 tree[cnt]=tree[rt];//先把原信息复制上,再修改即可实现 5 if(l==r) 6 { 7 tree[new_rt].sum+=v; 8 return new_rt; 9 } 10 int mid=(l+r)>>1; 11 if(p<=mid) tree[new_rt].lc=modify(tree[rt].lc,l,mid,p,v); 12 else tree[new_rt].rc=modify(tree[st].rc,mid+1,r,p,v); 13 tree[new_rt].sum=tree[tree[new_rt].lc].sum+tree[tree[new_rt].rc].sum; 14 return new_rt; 15 }
来源:博客园
作者:Hoyoak
链接:https://www.cnblogs.com/Hoyoak/p/11628883.html