Считайте, что у вас есть две решенные подзадачи. Вы уже вычислили времена, когда победитель меняется для ваших подзадач:
0-----t0------------t1----t2-----------t3------
0--t4-----------t5------------t6---------------
Теперь, чтобы объединить это: каждый раз, когда происходит событие , сравнивайте текущего победителя из двух списков, проверяйте ихcrossing time
, если он находится в текущем интервале, добавьте его в список событий.
Доказательство того, что это дает O(n log n)
сложность, аналогично классической сортировке слиянием.