给你一个正整数和一些查询的数组A.
在每个查询中,给出正整数X,Y,l和r。
对于每个查询,您要找到数组A的范围[l:r]中的最大元素,该元素大于X且小于Y.如果不存在此类元素,则输出-1。
我对类似问题有一个解释,你要在一个数组范围内找到小于K的最大元素。但在这里,我无法应用这种逻辑。
预期时间为O(log n)或多对数时间。
答案 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;
}