以下都是来自蓝书的定义. 因为acwing不能上传图片. 所以我只能纯手打.
根据任意正整数关于2的不重复次幂的唯一分解性质(举例:基础课的背包问题的二进制优化),若想一个正整数X 的二进制表示为
x=ak−1⋅ak−2…a2⋅a1⋅a0
其中等于1的位是{ai1,ai2,…,aim} (大括号的markdow不会打,这里它们属于同一个集合)
则正整数 X 可以被分解成x=2i1+2i2+⋯+2im
不妨设i1>i2>⋯>im,进一步地,区间 [1,X] 可以分成 O(logx) 个小区间:
- 长度为2i1的小区间 [1,2i1]
- 长度为2i2的小区间[2i1+1,2i1+2i2]
- 长度为2i3的小区间[2i1+2i2+1,2i1+2i2+2i3]
- …
- 长度为2im的小区间[[2i1+2i2+⋯+2im−1+1,2i1+2i2+⋯+2im]
我们可以发现这和录像讲的是一样的,但仍然过于抽象.
因此我们举例子,并重复上面这个步骤.
设X=15=23+22+21+20=1111
- 长度为23的小区间[1,23]=[1,8]
- 长度为22的小区间[23+1,23+22]=[9,12]
- 长度为21的小区间[23+22+1,23+22+21]=[13,14]
- 长度为20的小区间[23+22+21+1,23+22+21+20]=[15,15]
这些小区间的共同特点是,若区间结尾为R,则区间长度就等于lowbit(R)
以上就是y总在算法提高课<<树状数组>>前15分钟的定义. 同学们可以先看看这一篇分享后再去看录像大约18分钟左右
画图的例子. 相信大家能够很快理解.
##其实,acwing 可以上传图片😁
是的
谢谢,非常清晰
棒