Ctrl K

Отрезки, которые можно выровнять

Сложная
Дан массив heights из положительных чисел и бюджет budget. Возьмём любой непрерывный отрезок массива. За одну операцию можно увеличить на 1 любой его элемент; разрешено сделать не больше budget операций. Отрезок подходит, если такими операциями его можно сделать неубывающим (каждый элемент не меньше предыдущего). Каждый отрезок рассматривается отдельно: изменения в одном не влияют на другие. Верните количество подходящих отрезков.
Пример 1
heights=[4, 2, 5, 1], budget=3 → 7

Всего 10 отрезков. Не получится поправить только [5, 1] (нужно 4), [2, 5, 1] (нужно 4) и [4, 2, 5, 1] (нужно 2 + 4 = 6). Ответ 10 − 3 = 7.

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

Массив уже не убывает, так что подходят все 6 отрезков.

Пример 3
heights=[9, 1, 1], budget=8 → 5

Отрезок [9, 1, 1] стоит 8 + 8 = 16 и не подходит, остальные 5 отрезков укладываются в бюджет.

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

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