Ctrl K

План осушения прудов

Средняя
В парке бесконечно много прудов, пронумерованных с 1, и сначала все они пустые. Прогноз forecast расписан по дням: forecast[i] > 0 значит, что в день i дождь наполнит пруд с этим номером, а forecast[i] == 0 — что день сухой и в него можно осушить любой один пруд. Если дождь пойдёт над уже полным прудом, тот выйдет из берегов. Составьте план plan той же длины: в дождливые дни plan[i] = -1, в сухие — номер пруда, который осушают. Чтобы ответ был однозначным, план строится так. Идите по дням по порядку. Когда дождь снова приходит к пруду, наполненному в день p, отдайте этому пруду самый ранний ещё не занятый сухой день после p; если такого дня нет, перелива не избежать — верните пустой массив. Сухие дни, которые так и не понадобились, отдайте пруду 1 (осушить пустой пруд можно, ничего не изменится). Постарайтесь обойтись без квадратичного перебора сухих дней.
Пример 1
forecast=[3, 0, 5, 0, 3, 5] → [-1, 3, -1, 5, -1, -1]

Дождь над прудом 3 повторяется в день 4 — осушаем его в первый свободный сухой день после дня 0, это день 1. Для пруда 5 (дожди в дни 2 и 5) — день 3. Ответ [-1, 3, -1, 5, -1, -1].

Пример 2
forecast=[2, 0, 0, 7] → [-1, 1, 1, -1]

Повторных дождей нет, сухие дни не нужны — по правилу в них осушаем пруд 1.

Пример 3
forecast=[4, 6, 0, 4, 6] → []

Единственный сухой день уходит пруду 4, и пруд 6 в день 4 переполняется. Ответ — пустой массив.

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

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