如何在分段树中应用范围更新?

时间:2017-08-07 10:28:59

标签: algorithm segment-tree

我已经建立了一个持久性段树,但是现在有一些范围从某个索引更新到某个索引。如何以较低的复杂度更新持久性段树? 我只是重建持久性段树

1 个答案:

答案 0 :(得分:0)

  

但是现在让我们说原始数组元素从1更新为3.现在数组元素是3 6 2 4 5.现在再次询问相同的查询。所以我应该重建整个持久性段树。

如果范围更新意味着以非公式方式更改范围中的每个元素,那么您最好的选择是对给定范围内的每个元素应用单元素更新。这将是O(range_sz * log n),其中n是树中元素的数量。

我假设你知道如何在O(log n)中执行单元素更新,如果没有请问。

但是,如果您的更新受到更多限制,例如“将范围内的所有元素设置为给定值v”,则可以使用延迟更新:对于包含关联范围的分段树中的每个节点在更新范围内,将一些自定义字段设置为值v。然后,在查询时,无论何时接受节点的范围(如果其范围包含在查询范围内),请选中此字段,如果有值,则将该值作为min / max或您要查询的任何值对

这会将更新和查询保留在O(log n)