标记永久化,不同于线段树的懒标记,一旦存在就不会被消去。
1. 分块中的标记永久化
以区间加,区间查询的模板题为例。
在分块中,对于区间修改操作,我们将其拆为整块与散块。为了保证复杂度,对于整块的加操作,我们维护整块的加标记;对于散块的加操作,直接修改点的值。在区间询问中,对于整块,我们直接用维护的块内权值和;对于散块,我们用点的值加上点所在块的加标记。
在上述过程中“块的标记”就是一个永久化标记。
2. 线段树中的标记永久化
传统的线段树在区间修改时会采用懒标记的策略,调用该节点时下放标记,同时修改值。
而线段树和分块本质上都是小区间合并大区间的思想,我们同样可以将永久化标记应用到线段树中,可以节省标记下放操作,两者在应用中有许多相似之处。
如果采用永久化标记,某一节点的标记表示该节点对应区间的加标记,区间和表示不包括区间整体加的权值和。
对于区间修改,遍历的点所对区间有以下几种情况:
- 区间包含于目标区间,修改标记。
- 区间和目标区间有交集,修改区间和,并遍历儿子区间。
对于区间查询,遍历的点所对区间有以下几种情况:
- 区间包含于目标区间,返回区间和加上标记和。
- 区间与目标区间有交集,令新区间为该区间与目标区间的交集,返回新区间的区间和与标记和。