Ctrl K

Вырезать кусок ради подъёма

Сложная
Дан массив положительных чисел heights — высоты точек маршрута по порядку. Маршрут хочется сделать **строго возрастающим**, вырезав из него один непустой непрерывный кусок (подмассив). Оставшиеся элементы склеиваются, сохраняя порядок; пустой маршрут тоже считается строго возрастающим. Сколько существует подмассивов, после удаления которых heights становится строго возрастающим? Массив может быть длинным: перебор всех подмассивов не уложится во время.
Пример 1
heights=[2, 5, 3, 6] → 8

Подходят 8 кусков: [5], [3], [5, 3], [2, 5], [3, 6], [2, 5, 3], [5, 3, 6] и весь массив. Например, после удаления [5] остаётся 2, 3, 6, а после удаления [3, 6] — 2, 5. А вот [2] вырезать нельзя: останется 5, 3, 6.

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

Удалить можно первую четвёрку, вторую или обе — каждый раз остаётся строго возрастающий ряд (из одного элемента или пустой).

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

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