int ID(int l, int r) {
return l + r | l != r;
}
通常情况下,我们都是用rt来保存内容,然后左子树就是rt<<1,右子树就是rt<<1|1
我们仔细想一想,线段树的节点个数其实只有n个,但是为什么我们要开4n内存呢?很明显,有的节点内存并没有用上。
所以我们有么有一种方法,能直接把线段树所有的节点,恰好对应到n个连续空间上呢?
这个ID函数就做到了。有了这个ID函数,我们就没必要向下传递rt,对于每个区间直接用ID取值就行了!
下面是经典的敌兵布阵来演示一下。
#include
实际上这就是zkw线段树的用法,只不过用在递归式线段树效果也不错。。