Ctrl K

Суммы отрезков в заданной полосе

Сложная
Дан массив целых чисел values и два числа low и high. Для каждого непрерывного непустого отрезка массива посчитаем сумму его элементов. Верните количество отрезков, сумма которых лежит в промежутке от low до high включительно. Отрезки с разными границами считаются разными, даже если их суммы совпадают. Перебор всех отрезков работает за O(n²) — попробуйте быстрее.
Пример 1
values=[3, -4, 2], low=-1, high=1 → 2

Суммы отрезков: [3] = 3, [-4] = -4, [2] = 2, [3, -4] = -1, [-4, 2] = -2, [3, -4, 2] = 1. В рамки от -1 до 1 попадают две: -1 и 1.

Пример 2
values=[5, 5, 5], low=10, high=10 → 2

Сумму 10 дают два отрезка из двух соседних пятёрок.

Пример 3
values=[0, 0], low=0, high=0 → 3

Все три отрезка ([0], [0] и [0, 0]) дают сумму 0.

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

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