1 struct node 2 { 3 int l,r,sum; 4 }; 5 node no[500000]; 6 //存放每个点的值 7 int number[50000]; 8 //存放每个点对应的节点 9 int pa[500000]; 10 void build(int k,int l,int r) 11 { 12 no[k].l=l; 13 no[k].r=r; 14 if(l==r) 15 { 16 no[k].sum=number[l]; 17 pa[l]=k; 18 return ; 19 } 20 int mid=(l+r)/2; 21 build(k*2,l,mid); 22 build(k*2+1,mid+1,r); 23 no[k].sum=no[k*2].sum+no[k*2+1].sum; 24 } 25 void change(int k,int x) 26 { 27 no[k].sum +=x; 28 if(k!=1) 29 { 30 change(k/2,x); 31 } 32 } 33 int query(int k,int l,int r) 34 { 35 if(no[k].l==l&&no[k].r==r) 36 { 37 return no[k].sum; 38 } 39 int mid = (no[k].l+no[k].r)/2; 40 if(r<=mid) 41 { 42 return query(k*2,l,r); 43 } 44 else if(l>mid) 45 { 46 return query(k*2+1,l,r); 47 } 48 else 49 { 50 return query(k*2,l,mid)+query(k*2+1,mid+1,r); 51 } 52 }
线段树算法(未完成)
猜你喜欢
转载自www.cnblogs.com/mzchuan/p/11748480.html
今日推荐
周排行