补全:大数组开到全局

补全:前缀和数组有 2 × 10^6 个 long long(16 MB)。开在函数里会把栈撑爆(程序直接崩溃),要把它挪到函数外面。补全后输出 1 到 2 × 10^6 的和。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

补全:线段树开 4n

补全:递归写的线段树,节点编号最大能到接近 4n,数组开 2n 会越界(程序会被 at() 当场拦下)。补全后输出 10 个数的区间和。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

树状数组求区间和

用树状数组求 a[l..r](0 下标、闭区间)的和:bit_query(tree, 【0】) - bit_query(tree, l)。 本节模型:lowbit(x) = x & (-x)、bit_build(a) 建树状数组、b

开始练习 →

树状数组天然支持什么

第 1 步:求第 3 到第 7 个的和 第 2 步:前缀到 7:跳三格就够 第 3 步:前缀到 2:只要一格 第 4 步:两个前缀一减就是区间和 1 2 3 4 5 6 7 树状数组天然支持【0】。 本节模型:lowbit(x) = x &

开始练习 →

lowbit 在树状数组里表示

在树状数组里,lowbit(i) 表示【0】。 本节模型:lowbit(x) = x & (-x)、bit_build(a) 建树状数组、bit_query(tree, i) 求前缀和 a[0..i-1]。

开始练习 →

两次前缀求区间和

运行下面这段程序: 本节模型:lowbit(x) = x & (-x)、bit_build(a) 建树状数组、bit_query(tree, i) 求前缀和 a[0..i-1]。 #include <algorithm>

开始练习 →

另一组数的前缀和

运行下面这段程序: 本节模型:lowbit(x) = x & (-x)、bit_build(a) 建树状数组、bit_query(tree, i) 求前缀和 a[0..i-1]。 #include <algorithm>

开始练习 →

补全:查询的初值

补全 bit_query:累加器从 0 开始。补全后输出前 3 个的和。 本节模型:lowbit(x) = x & (-x)、bit_build(a) 建树状数组、bit_query(tree, i) 求前缀和 a[0..i-1]。

开始练习 →

补全:查询的循环条件

补全 bit_query:i > 0 才继续。补全后输出第 1 个数。 本节模型:lowbit(x) = x & (-x)、bit_build(a) 建树状数组、bit_query(tree, i) 求前缀和 a[0..i-1

开始练习 →

补全:建树时往父区间跳

补全 bit_build:父区间下标是 j = i + lowbit(i)。补全后输出前 5 个的和。 本节模型:lowbit(x) = x & (-x)、bit_build(a) 建树状数组、bit_query(tree, i)

开始练习 →