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

posted @ 2026-01-16 00:48  射杀百头  阅读(6)  评论(0)    收藏  举报