线段树学习札记

线段树

维护序列的树形数据结构——线段树
面对以下问题luoguP3372,给出一个数列:
(1) 将区间【x,y】内每一个数加上 k
(2) 求出某个区间【x,y】中每一个数的和。
虽然普通方法修改复杂度 O(1) 但是求和的效率却是 O(n)


线段树的思想个人来讲就是归并,线段树所维护的信息必须具有可合并性,个人认为其实现原理过于基础,不做分析。


一些有意思的证明
对于节点数为 n 深度为 h 的一棵树,其深度可以表示为 ( n + 1 ) 2 + 1 2 + 1 2 . . . \frac{\frac{\frac{(n+1)}{2}+1}{2}+1}{2}... 222(n+1)+1+1... 之 后由于得知这个值永远不会超过 ( n + h ) 2 h \frac{(n+h)}{2^h} 2h(n+h),而 ( n + h ) 2 h ≈ 1 \frac{(n+h)}{2^h}\approx{1} 2h(n+h)1 所以解方程得到 h   =   O(logn) \textup{\textbf{h = O(logn)}} h = O(logn)
以上的推论在下面的理论中显得格外重要

结论:线段树的结点的最大编号不会超过 4n-1 \textup{\textbf{4n-1}} 4n-1,其中 n n n 是序列长度。

考虑二叉树的建立方式,根节点为 1,对于一个结点 i i i 建立时左儿子记为 2 i 2i 2i 右儿子记为 2 i + 1 2i+1 2i+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值