Ctrl K

Кого видно справа

Сложная
Вдоль улицы слева направо стоят n башен, их высоты — в массиве heights; все высоты различны. С башни i видна башня j, если i < j и все башни строго между ними ниже обеих: min(heights[i], heights[j]) > max(heights[i+1..j-1]). Соседние башни всегда видят друг друга. Верните массив длины n, где на месте i стоит число башен справа, видимых с башни i. Прямой перебор пар — O(n²); есть решение за O(n).
Пример 1
heights=[4, 2, 3, 1, 5] → [3, 1, 2, 1, 0]

С башни 0 видны башни 1, 2 и 4 (башню 3 закрывает башня 2). С башни 1 видна только 2, с башни 2 — 3 и 4, с башни 3 — 4, с последней — никто.

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

Каждая башня видит только соседнюю: следующая выше и закрывает остальные.

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

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