045.线段树为什么要开 4N
我们讨论的是用静态数组实现的线段树
-
用完全二叉树覆盖所有区间
-
根节点编号为
1 -
对节点
i其左孩子为i*2右孩子为i*2 + 1
如果n为2的次幂
根节点区间为1 ~ n
n = 1 << i
l = 1,r = 1<<i
每次计算 mid = (l + r) >> 1都恰好可以将区间二分
所需的完全二叉树共 i+1 层
此时静态数组开2 * n就够了
n不是2的次幂
一定会出现区间不能恰好二分的情况
此时需要多向下分一次
所需的完全二叉树共 log_2 n + 2 层
完全二叉树节点总数为 2 ^ h - 1,h = log_2 n + 2
等于 4 * n - 1
I am the bone of my sword

浙公网安备 33010602011771号