При заданном размере n, в котором изначально все элементы равны 0. Задача состоит в том, чтобы выполнить несколько множественных запросов следующих двух типов. Запросы могут появляться в любом порядке.
- toggle (start, end): переключить (от 0 до 1 или от 1 до 0) значения от диапазона 'start' до 'end'.
- count (начало, конец): подсчитать количество единиц в заданном диапазоне от «начала» до «конца».
Input : n = 5 // we have n = 5 blocks toggle 1 2 // change 1 into 0 or 0 into 1 Toggle 2 4 Count 2 3 // count all 1's within the range Toggle 2 4 Count 1 4 // count all 1's within the range Output : Total number of 1's in range 2 to 3 is = 1 Total number of 1's in range 1 to 4 is = 2
Простое решение этой проблемы состоит в том, чтобы обойти весь диапазон для запроса «Переключить», и когда вы получите запрос «Подсчет», тогда посчитайте все 1 для данного диапазона. Но временная сложность для этого подхода будет O (q * n), где q = общее количество запросов.
Эффективным решением этой проблемы является использование дерева сегментов с ленивым распространением . Здесь мы собираем обновления, пока не получим запрос «Количество». Когда мы получаем запрос «Count», мы делаем все ранее собранные обновления Toggle в массиве, а затем подсчитываем количество единиц с заданным диапазоном.
Ниже приведена реализация вышеуказанного подхода:
|
Джава
|
C #
|
Выход:
1 2
Эта статья предоставлена Шашанком Мишрой (Гуллу) . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Двоичный массив после операций переключения диапазона М
- Индекс k-го установленного бита в двоичном массиве с запросами на обновление
- Запросы для десятичных значений подмассивов двоичного массива
- Подсчитать количество индексов, таких что s [i] = s [i + 1]: диапазон запросов
- Запросы, чтобы найти расстояние между двумя узлами двоичного дерева
- Найти начальный массив из заданного массива после запросов суммы диапазона
- Диапазон запросов для подсчета 1 с в подмассиве после операций переворачивания
- Запросы, чтобы найти количество целых чисел в диапазоне, который содержит данный образец
- Двоичное индексированное дерево: обновления диапазона и точечные запросы
- Запросы для подсчета целых чисел в диапазоне [L, R], так что их сумма цифр является простой и делится на K
- Запросы для определения расстояния между двумя узлами двоичного дерева — метод O (logn)
- Минимальный диапазон запросов в массиве
- Массив запросов диапазона над запросами диапазона
- Сумма четных значений и запросов на обновление массива
- Диапазон запросов продукта в массиве
0.00 (0%) 0 votes