线段树

实现三个功能:
1 add:在l到r区间所有数加一个数
2 update:在l到r区间所有数更新成一个相同的数
3 query:得到l到r区间的和
一般add和update不会同时做,一般一次只需要一个功能。

思路:可以利用二分划分区间,类似多重背包,任何一个数,利用二进制,可以在logn找到它。线段树也是一样,利用二分可实现快速查找。
在这里插入图片描述
上图是一个满二叉树,需要2n-1个空间。但如果你的数组长度不是2的指数,其实是无法构成一颗满二叉树的。可能需要补几个元素,让他们为0.
满二叉树:一直一样的范围会分到底,假如是6,会一边有3个,不满足偶数,就会有少分的情况。

所需范围:对于一个任意的n,4n是最多所需的空间。扩充(至多扩充一倍),满二叉树又一倍,所以是四倍。
最不省空间:恰好为2的指数+1,后面需要全部补齐。。

建树及数据结构:数组
只需准备数组,然后保存好hash关系即可。
在这里插入图片描述
找孩子:从最大的范围开始,左孩子:2i,右孩子:2i+1,从1开始࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值