段树上的延迟更新

时间:2015-12-22 14:47:50

标签: tree segment-tree lazy-propagation

我有一个问题,需要一个可以处理2个操作的结构:

  1. 将节点的值从位置x更改为位置y更改为newValue。

  2. 获取从位置a到b的值之和。

  3. 节点数为50000,查询数为50000。 我试图用懒惰更新实现IT树,但我无法弄清楚如何。第一个操作与通常的加法和乘法操作有某种不同。

1 个答案:

答案 0 :(得分:0)

对于范围[l ... r]的给定节点,存储范围的总和和相应范围的惰性值。使用lazy value = -1的初始值构建分段树。

对于更新操作,使用常规方法继续使用段树。在特定节点,使用惰性值更新节点的总和,并更新子节点的延迟值。当范围与节点完全重叠时,更新该节点的sum值并使用当前值更新子节点的延迟。

对于查询操作,使用常规方法继续使用分段树。在特定节点,使用惰性值更新节点的总和,并更新子节点的延迟值。然后,如果范围与节点重叠,则返回该节点的总和值。