Ctrl K

Сдвинуть встречи ради длинного перерыва

Средняя
Рабочий день длится с момента 0 до момента day_end. В нём n встреч, которые не пересекаются и идут по порядку: i-я встреча занимает отрезок [starts[i], ends[i]]. Можно переставить во времени не больше moves встреч. Переставленная встреча сохраняет длительность и должна остаться внутри рабочего дня; встречи по-прежнему не должны пересекаться, а их порядок менять нельзя. Верните наибольшую возможную длину непрерывного свободного промежутка внутри дня.
Пример 1
day_end=12, moves=1, starts=[2, 5, 9], ends=[4, 6, 11] → 4

Сдвинем встречу [5, 6] влево вплотную к первой: она станет [4, 5]. Тогда отрезок [5, 9] свободен — перерыв длиной 4.

Пример 2
day_end=10, moves=2, starts=[1, 4, 7], ends=[3, 5, 8] → 5

Сдвинем две последние встречи к концу дня: [7, 8] → [9, 10] и [4, 5] → [8, 9]. Тогда свободно с 3 до 8 — перерыв 5. Сдвиг первых двух встреч к началу дал бы только 4.

Пример 3
day_end=4, moves=1, starts=[0, 2], ends=[2, 4] → 0

Встречи занимают весь день, свободного времени нет.

Ограничения
  • 1 ≤ day_end ≤ 10⁹
  • 2 ≤ n = len(starts) = len(ends) ≤ 10⁵
  • 1 ≤ moves ≤ n
  • 0 ≤ starts[i] < ends[i] ≤ day_end
  • ends[i] ≤ starts[i + 1]
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПодравнять числа прибавлением СредняяКовёр на окрашенные отрезки СредняяСамый богатый ряд домов СредняяСамый узкий отрезок для всех списков СложнаяКомпания в одном ряду Сложная
загружаем Python…
Вход
day_end=12, moves=1, starts=[2, 5, 9], ends=[4, 6, 11]
Ожидается
4

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 75 тестов на сервере, включая скрытые.