Arrays 使用静态范围最小查询维护的数组中单个更改的复杂性

Arrays 使用静态范围最小查询维护的数组中单个更改的复杂性,arrays,algorithm,data-structures,rmq,cartesian-tree,Arrays,Algorithm,Data Structures,Rmq,Cartesian Tree,我在数据结构课程中进行了一次测试,其中一个问题是: 假设您有一个n大小的数组,该数组使用范围最小查询进行维护,该查询以o(1)的复杂度给出数组中两个数字之间的最小值。 当然,数组是o(n)准备好回答RMQ的,使用动态规划来解决不同的选项。 问题是-如果我更改数组中的一个对象(数字),我将如何更改我所做的准备,以便仍然可以在o(1)中找到RMQ,以及需要多大的复杂性 答案不是在o(n)中生成新的RMQ,它必须小于该值 这个问题不是家庭作业,我只是想通过考试来理解 提前感谢。根据更新和查询的复杂性,

我在数据结构课程中进行了一次测试,其中一个问题是:

假设您有一个n大小的数组,该数组使用范围最小查询进行维护,该查询以o(1)的复杂度给出数组中两个数字之间的最小值。 当然,数组是o(n)准备好回答RMQ的,使用动态规划来解决不同的选项。 问题是-如果我更改数组中的一个对象(数字),我将如何更改我所做的准备,以便仍然可以在o(1)中找到RMQ,以及需要多大的复杂性

答案不是在o(n)中生成新的RMQ,它必须小于该值

这个问题不是家庭作业,我只是想通过考试来理解


提前感谢。

根据
更新
查询
的复杂性,
RMQ
实际上有三种算法:

   Update     Query
1. O(N)       O(1)
2. O(1)       O(N)
3. O(logN)    O(logN)
第一类和第二类算法实现起来非常简单。第一个涉及存储所有可能查询的值,从而在
O(1)
时间内回答它们。第二种方法是在
O(1)
时间内更新数据结构,但查询需要
O(N)
。根据你的问题,你不可能有这样的组合

然而,第三类算法特别令人感兴趣。如果您放宽查询可能需要
O(logN)
时间的条件,而不是
O(1)
,那么您也将有一个优势,即无论更新和查询的数量如何,总体运行时间保持不变


好的,用于获取这种运行时间的最佳数据结构是和

存储已更改元素的索引I和新值V

在获取查询[L,R]时,检查