线段树#
先断树是一种常见的数据结构,用于一些线性区间的修改、查询问题,比如对于以下问题:
给出一个长度已知的、有初值的数字数组,接下来要进行许多区间加法操作(将一个区间的数值加到所有元素上)和区间求和操作(计算一个区间的元素和)。
如果该问题使用正常的数组方式来遍历求解,假设该数组长度为 N,每次修改和查询的操作耗时是 O(N)的;但线段树经过 O(N log N) 的构建之后,可以对上述两个操作做到 O(log N) 的优秀复杂度,足以体现其在区间问题上的重要性。
当然上面的例子只是线段树可以解决的一个简单问题,它可以做到的更复杂、更有趣的事情还有很多。在接下来的几篇文章当中我们将会学习使用线段树的概念以及如何使用 MoonBit 实现它,最终我们将一步步实现一棵支持区间加法与乘法、并可以查询区间和、拥有不可变特性的线段树。
本节我们将学习线段树的基本原理以及如何使用 MoonBit 编写一棵最基本的支持单点修改、查询的线段树。