赞
踩
1.线段树的每个节点都代表一个区间
2.线段树具有唯一的根节点,代表的区间是整个统计范围
3.线段树的每个叶子节点都代表一个长度为1的元区间
4.对于每个内部节点【l,r】,他的左子节点[l,mid],有子区间为[mid+1,r]
上图展示了一棵线段树。数的深度为logN,我们可以按照与二叉堆类似的“父子2倍”节点编号方法:
1.根节点编号为1.
2.编号为x的节点左子节点为x*2,右节点标号为x*2+1.那么我们就可以使用一个struct数组来保存线段树。
线段树的建树:
线段树的基本用途是对序列进行维护,支持查询与修改指令。给定一个长度为N的序列A,我们就可以在区间[1,N]上建立一颗线段树。每个叶子节点[i,i]保存a[i]的值。线段树的二叉树结构可以很方便的从下往上传递信息。以区间最大值问题为例,记
dat(l,r)等于max(l<=i<=r)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。