У нас есть массив arr [0. , , н-1]. Есть два типа запросов
- Найти XOR элементов от индекса l до r, где 0 <= l <= r <= n-1
- Измените значение указанного элемента массива на новое значение x. Нам нужно сделать arr [i] = x, где 0 <= i <= n-1.
Всего будет q запросов.
Ограничение ввода
n <= 10^5, q <= 10^5
Решение 1
Простое решение состоит в том, чтобы запустить цикл от l до r и вычислить xor элементов в заданном диапазоне. Чтобы обновить значение, просто сделайте arr [i] = x. Первая операция занимает O (n) время, а вторая операция занимает O (1) время. В худшем случае сложность времени O (n * q) для q запросов
что займет огромное время для n ~ 10 ^ 5 и q ~ 10 ^ 5. Следовательно, это решение будет превышать срок.
Решение 2
Другое решение состоит в том, чтобы хранить xor во всех возможных диапазонах, но существует O (n ^ 2) возможных диапазонов, следовательно, при n ~ 10 ^ 5 он превысит сложность пространства, следовательно, без учета временной сложности мы можем утверждать, что это решение не будет работать.
Решение 3 (Дерево Сегментов)
Предварительное условие : дерево сегментов
Мы строим дерево сегментов данного массива таким образом, что элементы массива находятся на листьях, а внутренние узлы хранят XOR листьев, покрытых под ними.
|
Выход:
Xor of values in given range = 1 Updated xor of values in given range = 8
Пространственно-временная сложность :
Сложность времени для построения дерева O (n). Всего существует 2n-1 узлов, и значение каждого узла вычисляется только один раз при построении дерева.
Временная сложность запроса составляет O (log n).
Временная сложность обновления также O (log n).
Общая сложность времени: O (n) для построения + O (log n) для каждого запроса = O (n) + O (n * log n) = O (n * log n)
Time Complexity O(n * log n) Auxiliary Space O(n)
Эта статья предоставлена Пратиком Чхаджером . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Сегментное дерево | (XOR заданного диапазона)
- Сегментное дерево | Набор 1 (сумма заданного диапазона)
- Сегментное дерево | Set 2 (Range Minimum Query)
- Итеративное дерево сегментов (минимальный диапазон запросов)
- Запросы для элементов больше K в заданном диапазоне индекса с использованием дерева сегментов
- Сегментное дерево | Установите 2 (Range Maximum Query с обновлением узла)
- Итеративное дерево сегментов (запрос максимального диапазона с обновлением узла)
- Обзор структур данных | Набор 3 (График, Три, Сегментное дерево и Суффикс-дерево)
- Декартово дерево из обхода обхода | Сегментное дерево
- Два запроса диапазона сегментов с одинаковой суммой
- Сегмент деревьев | (Продукт заданного диапазона по модулю м)
- ЛИС с использованием дерева сегментов
- Восстановление дерева сегментов
- Ленивое размножение в сегментном дереве | Набор 2
- Наименьший подмассив с GCD как 1 | Сегментное дерево
0.00 (0%) 0 votes