范围查询:数组A

时间:2017-11-06 04:51:25

标签: arrays algorithm logarithm range-query

  

给你一个正整数和一些查询的数组A.

     

在每个查询中,给出正整数X,Y,l和r。

     

对于每个查询,您要找到数组A的范围[l:r]中的最大元素,该元素大于X且小于Y.如果不存在此类元素,则输出-1。

我对类似问题有一个解释,你要在一个数组范围内找到小于K的最大元素。但在这里,我无法应用这种逻辑。

预期时间为O(log n)或多对数时间。

2 个答案:

答案 0 :(得分:0)

您需要一个堆数据结构。但是我总是用波浪符号而不是大O来注意时间复杂度。因此,具有N项的堆数据结构将不会超过~1 + logN比较并且用于删除~2logN并且如果您使用大O那么它就是' s相当于O(LogN)。

答案 1 :(得分:0)

I had an explanation of similar question where you are to find the maximum element less than K in a range of array. But here I am not able to apply that logic.

我不知道你的解释。但我认为你可以在此基础上继续发展。

假设您应用了该逻辑并发现最小元素小于Y。 让最大元素为u (-1 if no such value)

if (u > X)
{
    return u;
}
else
{
    return -1;
}