线段树 区间更新 和 查找时更新时候的探讨。
我们都知道区间更新时候有个lazy 标志。
而这个lazy 标志 我们要使得其可以理论重叠。
即使操作不能重叠。也尽可能让其重叠。
比如:一道修改区间>x的值为gcd(x,val)的操作题。
首先针对查找区间>x 这种查找。我们在节点上存储 区间最大值 作为剪枝。
另外针对求gcd(x,val)操作。用向量存储X的每个阶段的值。
另外这个题还有另外一个操作 是区间覆盖。
那么明显的。当该操作要覆盖上去的时候要清除原来的向量中的所有内容。
这便是操作之间的关系。
另外谨记。操作是针对当前节点的下面的节点的。
也就是说。你查找到的节点。其实是在update中更新了。
而后续的节点 都是通过pushdown。
讲讲区间覆盖。
1:往往用hash来判断。建立关系。比如能看到几种颜色。比如之前那个三角形线段。 要不要 进向量。
而三角形那个 有趣之处在于hash 的重复利用。。
2:区间覆盖 比如看得见看不见。要注意边境的处理。
离散化之后 你懂的。
注意多种操作的时候 覆盖操作 和别的操作的关系。
往往有覆盖 就没有别的操作。
而别的操作 操作到有覆盖的时候。 改覆盖标志即可。
另外。还有分当时有自己的操作 和 没有。
如果不存。 可以直接更新到下面。左边孩子 和 右边孩子都要更新了。
区间合并。
求最长连续上升序列。
查询的时候 返回结果要注意一点。 并非。+= 。
括号匹配。
确定 从头开始的每段连续和均>=0。
这个做法是:每段连续和的最小值。
这个最小值的更新。
Min(左边min,左边sum + 右边min)
另外。针对这个有转换问题。转换之后。最小值。变成了最大值。所以还得另外维护最大值。
长个心眼。
且整个和 为 0 。
另外。针对这种问题。