如果还不了解基本的线段树,请点击这里查看。
——线段树的构造,实际上是利用了二分的方法。每次在构造相应区间时,需要按照二分的规则来继续分解,并构造区间内的子区间,存成一个新的节点,并以此保留新的信息。构造整棵线段树时,需要把每个节点分解,直到所有的节点长度缩减为1时才可以停止。
——线段树的分解,遵循的规则和线段树的构造是类似的。不同之处在于:分解的规则就是:如果有某个节点的区间完全属于待分解区间,则该节点为终止节点,不再继续往下分解。所有终止的节点所代表的区间都相互不重叠,且加在一起就恰好等于整个待分解的区间。
线段树的构建:
function 以节点v为根建树、v对应的区间为L,R
{
对节点进行初始化,插入相应的节点基本信息
if(L != R)
{
以v的左孩子为根建树,区间为L,(L+R)/2
以v的右孩子为根建树,区间为(L+R)/2+1,R