Войти Регистрация
Алгоритмы

105. Пики заказов такси по минутам

Сложная

В load[i] — сколько заказов такси ожидается в зоне на i-й минуте смены. Диспетчер шлёт операции списком ops:

["add", l, r, x] — к минутам с l по r включительно прибавить x (концерт закончился — плюс 40 заказов, отменили рейс — минус 15);

["max", l, r] — узнать наибольшую нагрузку на минутах с l по r включительно.

Верните список ответов на запросы max в порядке их появления. Индексы с нуля, 0 ≤ l ≤ r < n.

В работе: Прогноз пиковой нагрузки по зоне, чтобы заранее вывести на линию водителей.

Пример 1

Ввод
load = [3, 1, 4, 1, 5]
ops = [["max", 0, 2], ["add", 1, 3, 10], ["max", 0, 2], ["max", 4, 4]]
Вывод
[4, 14, 5]

После прибавления нагрузка [3, 11, 14, 11, 5]: максимум на 0..2 — 14.

Пример 2

Ввод
load = [7]
ops = [["add", 0, 0, -9], ["max", 0, 0]]
Вывод
[-2]

После поправок нагрузка бывает отрицательной — это просто число.

Ограничения

  • 1 ≤ n ≤ 10⁵, 0 ≤ длина ops ≤ 10⁵
  • −10⁹ ≤ load[i], x ≤ 10⁹
  • Лимит — 3 с на тест (3000 мс).
Как вызывается ваш код Читать ввод и печатать ответ не нужно: мы вызываем функцию на каждом тесте и сравниваем то, что она вернула. print() и console.log() уходят в консоль.
def taxi_load_peaks(load, ops):
Дерево отрезковОтложенные операциицельO(n log n)

Источник: наша задача на данных Яндекса. Условие пересказано своими словами.