gpt4 book ai didi

c++ - 是否可以执行范围添加更新,将线性函数添加到最大段树?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:07:06 26 4
gpt4 key购买 nike

我正在考虑这个问题,但在尝试这样做时遇到了很多错误。可能吗?

最佳答案

我相信您是在问是否可以进行以下更新:给定更新 A B C,您想将 C 添加到从 A 到 B 的所有元素。

问题是在给定 N 是最大元素数的情况下,对线段树进行更新通常需要 O(N * logN) 时间。然而,关于实现线段树的关键思想是您想要假设范围查询,并且通常您对所有 O(N^2) 范围不感兴趣,而是对它们中的一个小得多的子集感兴趣。

您可以使用惰性传播 增强范围更新,这通常意味着您进行更新,但不会更新线段树中的所有节点 -> 您更新到某个点,但你不会继续沿着树往下走,因为它不需要。
假设您已经将所有内容更新到负责范围 [10; 的节点 K 之前。 30] 例如。稍后,您在 [20;40] 上执行“获取信息”查询。显然,您将不得不访问节点 K,但您对整个范围不感兴趣,而是范围 [20;30],这实际上是它的右 child 。
您要做的是将节点 K 的更新“推送”到其左子节点,然后是右子节点,并根据需要继续。

一般来说,这意味着在进行更新时,您只会进行一次更新,直到您为更新的时间间隔找到合适的节点,而不是继续进行下去。这会产生 O(logN) 时间。
然后,在查询时,当您到达一个您知道已为其保存了一些更新供以后使用的节点时,您会继续在树中传播更新。这也会产生 O(logN) 时间。

一些好的素材:Lazy propagation on segment trees

关于c++ - 是否可以执行范围添加更新,将线性函数添加到最大段树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29384209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com