【笔记】线段树技巧学习笔记
标记永久化
一般情况下,因为一些原因线段树不能 pushdown ,线段树上的每个节点维护的信息表示只考虑子树内的操作的信息,每次查询信息累加父节点标记。
例:维护区间最大值
struct Node {
  int subtree_max, delta;
};
每次修改时:
- 
把
node += d,就把subtree_max += d, delta += d;。 - 
update 时,
subtree_max = max(left->subtree_max, right->subtree_max) + delta 
每次查询时,累计祖先上的标记即可。
动态开点线段树合并
为保证复杂度,每次合并时不能 pushdown 开新点。
避免开点方法:
- 
标记永久化。
 - 
如果节点没有左右儿子就不
pushdown。 
                    
                
                
            
        
浙公网安备 33010602011771号