Algorithm 处理「;“更新要素”&&引用;获取所有元素中的最小值“;高效查询 问题:

Algorithm 处理「;“更新要素”&&引用;获取所有元素中的最小值“;高效查询 问题:,algorithm,performance,minimum,Algorithm,Performance,Minimum,给您一个数组a=[a0,a1,…,an-1],处理这些Q查询。查询有以下两种类型: 给定两个整数i和x,将ai更新为x 查找数组中所有元素的最小值 我已经知道使用段树(范围最小查询)的算法,时间复杂度是O(nlogn)。但这种方法也可以计算任何部分中的最小值,所以我认为有一种更简单、性能更好的方法可以处理这两种类型的查询 还有其他解决方法吗?使用数组和最小堆,并引用数组中的堆 数组具有按索引排列的元素(它基本上是您拥有的实际数组),堆按值排序,因此最小值始终位于顶部。您可以将每个数组元素的引

给您一个数组
a=[a0,a1,…,an-1]
,处理这些
Q
查询。查询有以下两种类型:

  • 给定两个整数
    i
    x
    ,将
    ai
    更新为
    x
  • 查找数组中所有元素的最小值
我已经知道使用段树(范围最小查询)的算法,时间复杂度是
O(nlogn)
。但这种方法也可以计算任何部分中的最小值,所以我认为有一种更简单、性能更好的方法可以处理这两种类型的查询


还有其他解决方法吗?

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

数组具有按索引排列的元素(它基本上是您拥有的实际数组),堆按值排序,因此最小值始终位于顶部。您可以将每个数组元素的引用(指针)添加到堆中对应的节点,以便在那里轻松找到它

要执行第一个查询,请访问索引
i
处的数组,并将元素值设置为
x
(在索引验证和所有这些之后)。然后更新堆中
ai
指向的节点并进行heapify。这将花费O(logn)


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

您想要在线算法还是离线算法?