Ctrl K

Очередь у турникета

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

В секунду 0 турникет перед этим простаивал, поэтому сначала выходит человек 1. В секунду 1 выходящих нет — проходит человек 0, в секунду 2 — человек 2, в секунду 3 — человек 3.

Пример 2
arrival=[0, 1, 1], direction=[0, 1, 0] → [0, 2, 1]

В секунду 0 входит человек 0. В секунду 1 ждут человек 1 (на выход) и человек 2 (на вход); в прошлую секунду входили, поэтому проходит человек 2. Человек 1 выходит в секунду 2.

Пример 3
arrival=[0, 2, 2], direction=[0, 0, 1] → [0, 3, 2]

В секунду 1 турникет простаивает, поэтому в секунду 2 приоритет у выхода: сначала выходит человек 2, а человек 1 входит в секунду 3.

Ограничения
  • 1 ≤ n ≤ 10⁵
  • len(arrival) = len(direction) = n
  • 0 ≤ arrival[i] ≤ n, массив arrival не убывает
  • direction[i] равно 0 или 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКолода для фокуса по возрастанию СредняяРазборчивая очередь у раздачи ЛёгкаяПоследний в кругу СредняяОчередь в кассу ЛёгкаяВыравнивание по ширине Сложная
загружаем Python…
Вход
arrival=[0, 0, 1, 3], direction=[0, 1, 0, 0]
Ожидается
[1, 0, 2, 3]

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