标签:
线段树(Segment Tree)是一种支持单点修改,区间求和,区间修改,区间求和的树形结构,在oi中有着十分广泛的应用。
线段树,即每个节点保存一个区间(线段)的相关信息的数据结构,如下图就是一棵线段树
(貌似大家都推荐用左开右闭的区间存储,但是个人习惯吧…)
下面的内容包括
对于一棵线段树,为了将区间在孩子结点一分为二,设父结点的区间为[a,b],则左孩子为[a,(a+b)/2]右孩子为[(a+b)/2,b],当a=b时,我们称这个结点是一个初始结点,即不能再分的子结点,此时我们便完成了一棵线段树的构造,代码实例如下:
void build(St*cur,int l,int r){ cur->Left=l;cur->Right=r; if(l<r){ cur->lc=new St; cur->rc=new St; build(cur->lc,l,(l+r)/2); build(cur->rc,(l+r)/2+1,r); }else cur->lc=cur->rc=NULL;
标签:
原文地址:http://www.cnblogs.com/oierforever/p/4766402.html