线段树基础

▼魔方 西西 提交于 2019-12-03 04:58:39

一,什么是线段树

线段树是一种二叉搜索树,它将一个区间划分成一些单元区间

每个单元区间对应线段树中的一个叶结点

将[1,n]分解成若干特定的子区间(数量不超过4*n)

用线段树对“编号连续”的一些点,进行修改或者统计操作,修改和统计的复杂度都是O(log2(n))

用线段树统计的东西,必须符合区间加法

也就是说,如果已知左右两子树的全部信息,比如要能够推出父节点

否则,不可能通过分成的子区间来得到[L,R]的统计结果

一个问题,只要能化成对一些“连续点”的修改和统计问题,基本就可以用线段树来解决了

解决问题时常会用到离散化

 由上图可知,每个节点的左孩子区间范围为[l,mid],右孩子为[mid+1,r]

对于结点k,左孩子结点为2*k(k<<1),右孩子为2*k+1(k<<1|1)

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!