高效处理 "update elements" & "get min value among all element" 查询

Processing "update elements" & "get min value among all element" queries efficiently

问题

给你一个数组a = [a<sub>0</sub>, a<sub>1</sub>, ..., a<sub>n-1</sub>],处理这些Q个查询。查询有以下两种类型:

我已经知道带线段树的算法(范围最小查询),时间复杂度O(n log n)。但是这种方式也可以计算出任何部分中的最小值,所以我认为有更简单和性能更好的方式可以处理这两种类型的查询。

还有其他办法解决吗?

使用数组和最小堆,并引用数组中的堆。

数组按索引包含元素(它基本上是您拥有的实际数组)并且堆按值排序,因此最小值始终在最前面。您将每个数组元素的引用(指针)添加到堆中相应的节点,以便您可以在那里轻松找到它。

要执行第一个查询,您访问索引 i 处的数组并将元素值设置为 x(在索引验证等之后)。然后更新 a<sub>i</sub> 指向的堆中的节点并堆化。这花费 O(log n).

要执行第二个查询,只需从堆中获取最小值。 O(1).