跳到正文
信奥逐课

第 417 课

建树

🟠 进阶 约 10 分钟

一句话理解

建树:递归到底把叶子赋值为原数组,再 pushup。

为什么要学

O(n)。

讲解

build(p,l,r)。l==r 为叶。

例子

void build(int p, int l, int r) {
    if (l == r) { sum[p] = a[l]; return; }
    int mid = (l + r) >> 1;
    build(p<<1, l, mid);
    build(p<<1|1, mid+1, r);
    sum[p] = sum[p<<1] + sum[p<<1|1];
}

后序建。

常见错误

练习 做完再看下一课

建线段树是 O(n) 的。

在线练习 C++ 在浏览器里编译,代码不会上传

Ctrl / ⌘ + Enter 运行 · Tab 缩进

输出
 

进度保存在本机浏览器里。

左右方向键也可翻课