获胜者火车的算法?

Algorithm for winner trains?

这是过去试卷中的一道题:

假设有 $n$ 列火车 X_1,X_2 ... X_n,所有这些火车都 运行 沿着平行轨道。火车 $i$ 从位置 S[i] >= 0 和 运行s 以恒定速度 V[i] 开始。如果存在 [t_1,t_2]t_2 - t_1 < delta 的时间间隔,其中火车领先于所有其他火车,则火车被认为是赢家。您需要输出所有获胜者列车。为此设计一个O(n log n)算法。

由于需要 O(n log n),我正在考虑一些分而治之的方法,但找不到合适的合并子例程。

假设您已经解决了两个子问题。您已经计算了获胜者为您的子问题改变的时间:

0-----t0------------t1----t2-----------t3------
0--t4-----------t5------------t6---------------

现在合并:每次 事件 发生时,比较两个列表中的当前获胜者,检查他们的 crossing time,如果它在当前间隔内添加它到事件列表。

这给出 O(n log n) 复杂性的证明与经典归并排序相同。