Ctrl K

Очередь к одному принтеру

Средняя
В офисе один принтер. Есть n заказов на печать с номерами от 0 до n - 1: jobs[i] = [appear, length] значит, что заказ i появляется в момент appear и печатается ровно length единиц времени. Принтер работает так: - если он свободен и ждущих заказов нет, он простаивает до появления следующего; - если он свободен и заказы ждут, он берёт самый короткий; при равной длине — с меньшим номером; - начатый заказ печатается до конца без перерывов; - закончив один заказ, принтер в тот же момент может взять следующий (заказы, появившиеся ровно в этот момент, тоже участвуют в выборе). Верните номера заказов в том порядке, в котором принтер их напечатает.
Пример 1
jobs=[[2, 5], [3, 1], [4, 2], [4, 1]] → [0, 1, 3, 2]

В момент 2 есть только заказ 0, печать идёт до 7. К этому времени ждут 1, 2 и 3; самые короткие — 1 и 3 (по 1), берём меньший номер 1, затем 3, затем 2.

Пример 2
jobs=[[1, 2], [10, 3], [10, 1]] → [0, 2, 1]

После заказа 0 принтер простаивает до момента 10, затем берёт более короткий заказ 2 и потом 1.

Ограничения
  • 1 ≤ n = len(jobs) ≤ 10⁵
  • 1 ≤ appear, length ≤ 10⁹
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиK-й результат сверху СредняяСтудии для записи СредняяСамые частые значения СредняяK-е по величине в упорядоченной таблице СредняяЗадания с перерывом на остывание Средняя
загружаем Python…
Вход
jobs=[[2, 5], [3, 1], [4, 2], [4, 1]]
Ожидается
[0, 1, 3, 2]

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