数一数 2n 不够的有几个
补全:统计 n = 1 到 1000 里,线段树用到的最大编号超过 2n 的 n 一共有多少个。 (本题用 g++ -std=c++17 -O0 编译。)
在全局数组上建树
线段树数组 tr 已经开成全局的 4n。补全 gbuild,建好后查下标 1 到 3 的和。 (本题用 g++ -std=c++17 -O0 编译。)
单点修改只走一条路
补全 gupdate:把下标 pos 的值改成 val,只沿着一条从叶子到根的路更新。把下标 2 改成 30 后查下标 1 到 3 的和。 (本题用 g++ -std=c++17 -O0 编译。)
区间最大值查询
这次 tr 存的是区间最大值(已建好)。补全 gmax:查下标 1 到 3 的最大值(数都是正的,不搭边返回 -1)。 (本题用 g++ -std=c++17 -O0 编译。)
树状数组解决什么问题
第 1 步:t[1..5]:每格管一小段 第 2 步:查前 3 个:从 i=3 出发 第 3 步:加上 t[3],i 减去 1 变成 2 第 4 步:加上 t[2],i 减去 2 变成 0 第 5 步:两格就凑齐了前 3 个 17 41 1
lowbit 取的是什么(C++)
lowbit(x) 取的是【0】。
前三个数的和
数组是 17、24、15、13、23。 运行下面这段程序: #include <algorithm> #include <iostream> #include <map> #include <str
先把 lowbit 写出来
补全 lowbit:取出 x 二进制里最低那个 1 代表的值。算 lowbit(12)。 (本题用 g++ -std=c++17 -O0 编译。)
建树状数组查前缀和
补全 fen_prefix:从下标 i 出发一路减 lowbit,把沿途的值加起来。查前 3 个数的和。 (本题用 g++ -std=c++17 -O0 编译。)
任意一段区间的和
补全 fen_range:用两次前缀和相减求出区间 [l, r] 的和(下标从 1 开始)。求第 2 到第 4 个的和。 (本题用 g++ -std=c++17 -O0 编译。)