Ctrl K

Задачи на самый лёгкий свободный сервер

Средняя
Есть n серверов и m задач. weights[i] — вес сервера i, durations[j] — сколько секунд выполняется задача j. Задача j поступает в очередь в секунду j (задача 0 — в секунду 0). Пока в очереди есть задачи и есть свободные серверы, первая задача очереди отправляется на свободный сервер с наименьшим весом, а при равенстве весов — с наименьшим номером. Если свободных серверов нет, задачи ждут; как только серверы освобождаются, очередь разбирается в порядке поступления по тем же правилам. Сервер, взявший задачу j в секунду t, снова свободен в секунду t + durations[j] и в эту же секунду может взять следующую задачу. Верните массив длины m, где j-й элемент — номер сервера, выполнившего задачу j.
Пример 1
weights=[4, 2], durations=[3, 1, 2] → [1, 0, 0]

Секунда 0: задача 0 идёт на лёгкий сервер 1 до секунды 3. Секунда 1: свободен только сервер 0, задача 1 занимает его до секунды 2. Секунда 2: сервер 0 освободился, задача 2 снова на нём.

Пример 2
weights=[1], durations=[2, 2, 1] → [0, 0, 0]

Сервер один: задача 1 ждёт в очереди до секунды 2, задача 2 — до секунды 4.

Пример 3
weights=[3, 3, 5], durations=[5, 5, 1, 1] → [0, 1, 2, 2]

При равном весе выбирается сервер с меньшим номером: сначала 0, затем 1; задачи 2 и 3 достаются серверу 2.

Ограничения
  • 1 ≤ n, m ≤ 2 · 10⁵
  • 1 ≤ weights[i], durations[j] ≤ 2 · 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиK-й результат сверху СредняяСтудии для записи СредняяСамые частые значения СредняяСамые лёгкие пары СредняяK-е по величине в упорядоченной таблице Средняя
загружаем Python…
Вход
weights=[4, 2], durations=[3, 1, 2]
Ожидается
[1, 0, 0]

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