Дан массив размера N, содержащий только числа от 0 до 63, и вам задают Q запросов относительно него.
Запросы следующие:
- 1 XY т.е. изменить элемент с индексом X на Y
- 2 LR т.е. напечатать количество различных элементов, присутствующих между L и R включительно
Примеры:
Input: N = 7 ar = {1, 2, 1, 3, 1, 2, 1} Q = 5 { {2, 1, 4}, {1, 4, 2}, {1, 5, 2}, {2, 4, 6}, {2, 1, 7} } Output: 3 1 2 Input: N = 15 ar = {4, 6, 3, 2, 2, 3, 6, 5, 5, 5, 4, 2, 1, 5, 1} Q = 5 { {1, 6, 5}, {1, 4, 2}, {2, 6, 14}, {2, 6, 8}, {2, 1, 6} }; Output: 5 2 5
Предварительные условия: дерево сегментов и управление битами
Подходить:
- Сформированная в вопросе bitMask будет обозначать наличие i-го числа или нет, мы выясним, что, проверяя i-й бит нашей bitMask, если i-й бит включен, это означает, что i-й элемент присутствует, в противном случае его нет.
- Создайте классическое дерево сегментов, и каждый из его узлов будет содержать битовую маску, которая используется для декодирования количества отдельных элементов в этом конкретном сегменте, которое определяется конкретным узлом.
- Постройте дерево сегментов снизу вверх, поэтому битовую маску для текущего узла дерева сегментов можно легко рассчитать, выполнив операцию побитового ИЛИ для битовых масок правого и левого дочерних узлов этого узла. Листовые узлы будут обрабатываться отдельно. Обновление также будет сделано таким же образом.
Ниже приведена реализация вышеуказанного подхода:
|
python3
|
Выход:
3 1 2
Временная сложность: O (N + Q * Log (N))
Рекомендуемые посты:
- Подсчитать количество различных подмножеств суммы в данном диапазоне
- Найдите отличную пару (x, y) в заданном диапазоне, так что x делит y
- Подсчет подмножеств, имеющих четные четные числа
- Количество различных сумм, которые можно получить, сложив простые числа из заданных массивов
- Количество чисел, имеющих только 1 установленный бит в диапазоне [0, n]
- Найти два различных простых числа с данным продуктом
- Найти N различных чисел, побитовое Or которых равно K
- Подсчитать элементы, которые делят все числа в диапазоне LR
- Количество чисел из диапазона [L, R], который содержит хотя бы одну цифру, которая делит K
- Количество чисел в диапазоне, где число не содержит более K ненулевых цифр
- Подсчитайте числа из диапазона, чьи основные факторы только 2 и 3
- Сумма чисел в диапазоне [L, R], число делителей которых простое
- Числа в диапазоне [L, R] такие, что число их делителей является четным и простым
- Подсчитать числа в диапазоне, которые делятся на все элементы массива
- Количество чисел в диапазоне, где цифра d встречается ровно K раз
0.00 (0%) 0 votes