EduBrick

C. Исключающее или на отрезке

1000 мс · 256 МБ · всё или ничего

То же, что задача C в классе, только вместо суммы - побитовое исключающее или.

Всё, что нужно от операции для корневой, - ассоциативность и возможность слить два куска. У xor это есть, так что схема не меняется: в каждом блоке храним xor его элементов, запрос собираем из огрызков и целых блоков.

Формат ввода

В первой строке - числа nn и qq (1≤n,q≤2⋅1051 \le n, q \le 2 \cdot 10^5).

Во второй - nn чисел от 0 до 230−12^{30} - 1.

Далее qq строк. «1 i x» - присвоить a[i]=xa[i] = x (0≤x<2300 \le x < 2^{30}). «2 l r» - исключающее или на отрезке [l,r][l, r].

Формат вывода

На каждый запрос второго типа выведите результат в отдельной строке.

Примеры

ввод
5 3
1 2 3 4 5
2 1 5
1 3 0
2 1 5
вывод
1
2
ввод
4 2
1073741823 0 1073741823 5
2 1 3
2 1 4
вывод
0
5
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.