线段树之空间优化
一般来说,传统的线段树结点都是这样定义的:
struct Node {
int left, right;
int w;
int f;
}tree[4*manx];
对于跨度为 n 的数据我们需要开 4 倍的空间,这样才能保证不会出现越界的情况。
在这样的定义中,左孩子的坐标是 2*k,右孩子的坐标是 2*k+1,叶子结点的坐标有可能超过 2n 但不会超过 4n,因此需要开 4 倍的空间。
但是开了这么多的空间中仅仅只有 2n-1 个结点是真正被使用的,其他的结点都被填空,造成了很多的空间浪费。
怎么进行优化呢?还记得之前讲过的 dfs 序吗,这里又派