0

我有一个数组 A[0..n],我需要在区间 A[k₀..n] 中找到最小值。基于此,数组扩展为值 A[n+1],我需要 A[k₁..n+1] 中的最小值。再次用一些 A[n+2] 扩展数组并查询 A[k₂..n+2] 中的最小值。有没有办法在 O(1) 时间内完成每个查询(经过一些预处理)?

与这个早先的问题:Range minimum queries when array is dynamic相比,不同的是,查询区间从不同的位置 k₀、k₁、k₂、...开始,查询区间的末尾始终是数组的最右端。在我的应用程序中,我从一个空数组 (n=0) 开始,因此预处理可能很简单。如果这有帮助,在我的应用程序中,扩展中使用的新值始终为 1+(最后一个查询返回的最小值)。但是位置 k₀, k₁, k₂, ... 取决于数组外部的数据。

4

1 回答 1

1

我不知道如何让新元素的添加和查询都发生在 中O(1),这可能是不可能的(尽管我不完全确定如何证明这一点)。但是你可以很容易地O(log(n))使用分段树来实现它。对于任何实际应用来说,这可能已经足够好了。

于 2021-05-30T22:26:29.627 回答