Ctrl K

Силуэт под ограничениями высоты

Средняя
Вдоль улицы n участков, на каждом нужно построить по зданию. Для участка i задан предел высоты limits[i]: здание там должно иметь высоту от 1 до limits[i] включительно. Силуэт улицы должен быть горкой: высоты не убывают до некоторого участка-вершины, а после него не возрастают. Вершина может быть у края улицы. Верните наибольшую возможную сумму высот всех зданий. Участков может быть до 10⁵, так что перебор вершины с проходом по всей улице для каждой не уложится по времени.
Пример 1
limits=[2, 7, 3, 9, 1] → 18

Вершина на участке 3 (высота 9): слева высоты [2, 3, 3], справа 1. Ряд [2, 3, 3, 9, 1], сумма 18. Вершина на участке 1 дала бы [2, 7, 3, 3, 1] — 16.

Пример 2
limits=[5, 4, 4, 1] → 14

Ряд уже не возрастает, можно строить по пределам: 5 + 4 + 4 + 1 = 14.

Пример 3
limits=[6] → 6
Ограничения
  • 1 ≤ len(limits) ≤ 10⁵
  • 1 ≤ limits[i] ≤ 10⁹
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПрямой обход дерева поиска СредняяНиз, пик и середина СредняяСледующее большее по кругу СредняяПерестроить середину шеренги СредняяДерево из вершин-максимумов Средняя
загружаем Python…
Вход
limits=[2, 7, 3, 9, 1]
Ожидается
18

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