线段树 区间更新 和 查找时更新时候的探讨。

我们都知道区间更新时候有个lazy 标志。

而这个lazy 标志 我们要使得其可以理论重叠。

即使操作不能重叠。也尽可能让其重叠。

比如:一道修改区间>x的值为gcd(x,val)的操作题。

首先针对查找区间>x 这种查找。我们在节点上存储 区间最大值 作为剪枝。

另外针对求gcd(x,val)操作。用向量存储X的每个阶段的值。

另外这个题还有另外一个操作 是区间覆盖。

那么明显的。当该操作要覆盖上去的时候要清除原来的向量中的所有内容。

 

这便是操作之间的关系。

另外谨记。操作是针对当前节点的下面的节点的。

也就是说。你查找到的节点。其实是在update中更新了。

而后续的节点 都是通过pushdown。

 

讲讲区间覆盖。

1:往往用hash来判断。建立关系。比如能看到几种颜色。比如之前那个三角形线段。 要不要 进向量。

而三角形那个 有趣之处在于hash 的重复利用。。

2:区间覆盖 比如看得见看不见。要注意边境的处理。

离散化之后  你懂的。

 

注意多种操作的时候 覆盖操作 和别的操作的关系。

往往有覆盖 就没有别的操作。

而别的操作 操作到有覆盖的时候。 改覆盖标志即可。

   另外。还有分当时有自己的操作 和 没有。

 

如果不存。 可以直接更新到下面。左边孩子 和 右边孩子都要更新了。

 

区间合并。

求最长连续上升序列。

查询的时候  返回结果要注意一点。 并非。+= 。

 

括号匹配。

确定 从头开始的每段连续和均>=0。

这个做法是:每段连续和的最小值。

这个最小值的更新。

Min(左边min,左边sum + 右边min)

另外。针对这个有转换问题。转换之后。最小值。变成了最大值。所以还得另外维护最大值。

长个心眼。

且整个和 为 0 。

 

 

另外。针对这种问题。

转换啊。什么的。标记繁多。记住一个一个 都不要漏

posted @ 2015-05-26 19:02  Milkor  阅读(517)  评论(0编辑  收藏  举报