查找最大差异+数组元素

时间:2017-10-08 13:20:41

标签: arrays algorithm

我们有一个由每个条目组成的数组作为两个整数的元组。让数组为A = [(a1, b1), (a2, b2), .... , (an, bn)]。现在我们有多个查询,我们得到一个整数x,我们需要找到ai + |x - bi| for 1 <= i <= n的最大值。

我理解这可以在每个查询的O(n)时间复杂度中轻松实现,但我正在寻找比这更快的东西,可能O(log n)用于每个查询。我可以在O(n)时间内预处理数组,但查询应该比O(n)更快。

任何形式的帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

过度思考这一点似乎太容易了 对于n = 1,函数是v形的,a1的最小b1,斜率分别为-1和1 - 让我们称这些值ac和{ {1}}(对于合并) 对于另外一对bc,其中一对可以支配另一对((ai, bi)),然后可以将其忽略。
否则,组合的下降斜率将来自具有较大|bc - bi| ≤ |ac - ai的对,即从另一个上升的斜率。 最小值将介于个体b之间,更接近b对,b更大,距离是(绝对值)“坐标”之差的一半差异,金额越高的最小值 主要的问题是两者都不需要是一个整数 - 唯一的选择是正好在两个整数之间的中间
(结束时,最大a的下降斜率和最大ai + bi的上升斜率。)