我阅读了有关 Range Minimum Queries 的维基百科链接,查看了更多教程(topcoder 和其他链接),但我有一个非常基本的问题:
RMQ 的正式定义是:给定一个从有序集合(例如数字)中取出的对象数组,范围最小查询(或 RMQ) from to 询问子数组中最小元素的位置。
我不明白的是,为什么我们不能通过线性搜索来解决问题?在数组 A[0...n] 中,如果我们需要 RMQ(i,j)
min = A[i]
index = i
for iter=i; iter <j; iter ++
if A[iter] <= min
min = A[iter]
index = iter;
在循环结束时,我们知道最小值和最小值所在的索引。
我肯定在这里遗漏了一些东西......有人可以帮我理解为什么我们需要RMQ吗?