线段树

  线段树,也叫区间树(interval tree),它在各个节点保存一条线段(即子数组)。设数列A包含N个元素,则多线段树的根节点表示整个区间A[1,N],左孩子表示区间A[1,(1+N)/2],右孩子表示区间A[(1+N)/2+1,N],不断递归,直到叶子节点,叶子节点只包含一个元素。树的深度

 

  线段树有如下特征:

    1.线段树是一个完全二叉树;

    2.线段树的深度不超过logL,L是区间的长度;

    3.线段树把一个长度为L的区间分成不超过2logL 条线段;

  线段树的基本操作有构造线段树、区间查询和区间修改。

  线段树通常解决和区间统计有关的问题。比如某些数据可以按区间进行划分,按区间动态进行修改,而且还需要按区间多次进行查询,那么使用线段树可以达到较快查询速度。

  用线段树解题,关键是要想清楚每个节点要存哪些信息(当然区间起点和终点,以及左右孩子指针是必须的),以及这些信息如何高效查询,更新。不要一更新就更新到叶子节点,那样更新操作的效率最坏有可能O(N)的。

posted @ 2018-03-06 16:43  蓝天飞翔的白云  阅读(142)  评论(0)    收藏  举报