0Pricing
Competitive Programming Academy · Урок

Массивы разностей для обновлений диапазонов

Быстро выполняйте множество операций добавления к диапазонам

«Массивы разностей для обновлений диапазонов» — бесплатный урок Competitive Programming Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Competitive Programming Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Competitive Programming Academy содержит 4 уроков всего.

Переверните задачу

Префиксные суммы позволяют быстро отвечать на запросы по диапазонам. Массив разностей переворачивает эту идею и позволяет быстро применять множество обновлений диапазонов. 🔁

Медленный способ

Добавление значения к каждому элементу диапазона при многократном повторении занимает O(n) на одно обновление. Для q обновлений эта стоимость становится огромной.

Сохраните изменения

Вместо изменения каждой ячейки запишите только места, где изменение начинается и заканчивается. Отметьте границы, а не середину.

Что хранит массив разностей

Массив разностей хранит разницу между каждым элементом и предыдущим. Изменение одной разницы сдвигает весь последующий отрезок.

Приём с двумя отметками

Чтобы прибавить v к элементам от l до r, прибавьте v в индексе l и вычтите v в индексе r + 1. Всего две правки покрывают весь диапазон.

diff[l] += v
diff[r + 1] -= v

Зачем нужно вычитание

Плюс в l включает изменение, а минус в r + 1 снова его выключает. Вместе они ограничивают обновление одним диапазоном.

Применяйте все обновления дёшево

Каждое обновление — это всего две записи в массив, поэтому q обновлений занимают в сумме O(q). Основная работа откладывается до конца.

Восстановите итоговый массив

После расстановки всех отметок вычислите префиксную сумму массива разностей. Этот единственный проход восстановит каждое итоговое значение.

for i in range(1, n):
    diff[i] += diff[i - 1]

Добавьте защитную ячейку

Сделайте массив на одну ячейку длиннее, чтобы r + 1 никогда не вышел за его границы. Дополнительная защитная ячейка предотвращает ошибки индекса.

Общая стоимость

Вы тратите O(q) на отметки обновлений и ещё один проход O(n) на восстановление массива. Совокупная стоимость намного ниже наивной O(n умножить на q).

Где это особенно эффективно

Массивы разностей особенно полезны для подсчёта бронирований, дорожных сборов и любых задач с множеством операций добавления к диапазону и одним итоговым чтением.

Быстрая проверка

Вы прибавляете v к каждому элементу с индекса l по индекс r.

Итоги

Теперь Вы умеете объединять обновления диапазонов с помощью массива разностей: отметьте l и r + 1, а затем один раз вычислите префиксные суммы для восстановления. Быстрые обновления, одно чтение. ✅

Часто задаваемые вопросы

Урок «Массивы разностей для обновлений диапазонов» бесплатный?

Да — полный текст урока «Массивы разностей для обновлений диапазонов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Competitive Programming Academy, подпишись на CoddyKit PRO. Курс Competitive Programming Academy содержит 4 уроков всего.

Чему я научусь в уроке «Массивы разностей для обновлений диапазонов»?

Быстро выполняйте множество операций добавления к диапазонам Ты практикуешь Competitive Programming Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Competitive Programming Academy?

Предыдущий опыт не требуется. Competitive Programming Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Массивы разностей для обновлений диапазонов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Competitive Programming Academy?

Да. Каждый урок Competitive Programming Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Построение массива префиксных сумм
  2. Сумма любого диапазона вычитанием
  3. Подсчёт подмассивов с заданной суммой
  4. Массивы разностей для обновлений диапазонов
← Назад к Competitive Programming Academy