树状数组解决什么问题

树状数组解决什么问题

树状数组(Fenwick)擅长的是【0】。

阅读更多 →
改一个值,再查一次

改一个值,再查一次

把下标 2 上的 15 改成 30,然后重新查下标 1 到 3 的和。 (这里偷个懒:改完之后整棵树重建一次。真正的线段树只需要沿着一条路往上更新,代价是 O(log n)。)

阅读更多 →
把

把"求和"换成"求最大"

线段树不止能求和。补全 max_build:把合并那一步从相加换成取较大的。 建好之后输出根节点存的值。

阅读更多 →
查一段区间的和

查一段区间的和

补全 seg_sum:查下标 ql 到 qr 这一段的和。 查下标 1 到 3,输出结果。

阅读更多 →
把线段树建起来

把线段树建起来

补全 seg_build:叶子存单个元素,非叶子存左右两个孩子之和。 建好之后输出根节点存的值(也就是整段的和)。

阅读更多 →
整段里最大的是几

整段里最大的是几

同一个数组。运行下面这段程序: A = [17, 24, 15, 13, 23] print(max(A))

阅读更多 →
中间那三个数的和

中间那三个数的和

数组是 17、24、15、13、23。运行下面这段程序(查下标 1 到 3): def seg_build(a, node, l, r, tree): if l == r: t

阅读更多 →
查一段区间和要多久

查一段区间和要多久

用线段树查任意一段区间的和,代价是【0】。

阅读更多 →
线段树的每个节点存什么

线段树的每个节点存什么

线段树的每个节点存的是【0】。

阅读更多 →
两种树的高度差多少

两种树的高度差多少

同一个 levels。一百万条数据,把 B+树(每节点 100 键)和二叉树(每节点 2 键)的层数拼起来输出(用 / 隔开)。 这个差距就是数据库索引选 B+树的全部理由。

阅读更多 →