Ctrl K

K-я по величине сумма отрезка

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

Суммы всех отрезков: 4, 1, 2, 4 + 1 = 5, 1 + 2 = 3, 4 + 1 + 2 = 7. По возрастанию: 1, 2, 3, 4, 5, 7 — третья 3.

Пример 2
values=[2, 2, 2], rank=5 → 4

Суммы: три раза 2, два раза 4 и одна 6. Пятое место — 4: равные суммы считаются по отдельности.

Ограничения
  • 1 ≤ len(values) = n ≤ 2 · 10⁴
  • 1 ≤ values[i] ≤ 5 · 10⁴
  • 1 ≤ rank ≤ n·(n+1)/2
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый короткий рывок Средняяk ближайших значений СредняяОтрезки с маленьким произведением СредняяСамый длинный общий кусок СредняяСамая длинная серия единиц с k правками Средняя
загружаем Python…
Вход
values=[4, 1, 2], rank=3
Ожидается
3

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