В самой обычной школе в Ваканде на уроке арифметики сегодня проходят битовые операции с числами.
А именно, операции and и xor. Напомним, что битовая операция над двумя числами выполняется независимо по каждому биту. Таблицы истинности для операций and и xor выглядят следующим образом:
| x | y | x and y | x xor y |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
В начале урока учитель написал на доске последовательность длины n из чисел. Затем он просит учеников последовательно выполнять следующие операции:
xor с числом x ко всем элементам текущей последовательности.and с числом x ко всем элементам текущей последовательности.Помогите ученикам ответить на все вопросы учителя правильно.
В первой строке содержится два целых числа n и q --- количество чисел в последовательности, и количество операций, которое нужно выполнить (1≤n≤100,000, 0≤q≤100,000). В следующей строке дано n целых чисел a_i --- элементы исходной последовательности (0≤a_i<220). В следующих q строках дано описание операций. Если строка начинается со слова <<xor>>, то это операция первого типа, дальше в той же строке дано число x, и ученикам нужно заменить все элементы cur_i текущей последовательности на (cur_i xor x) (0≤x<220). Если строка начинается со слова <<and>>, то это операция второго типа, дальше в той же строке дано число x, и ученикам нужно заменить все элементы cur_i текущей последовательности на (cur_i and x) (0≤x<220). Если строка начинается с символа '?', то дальше даны два целых числа l и r, ученикам нужно посчитать количество элементов текущей последовательности cur_i, таких что l≤cur_i≤r (0≤l≤r<220).
Для каждой операции третьего типа на новой строке выведите искомое количество чисел.
Пояснение к первому тесту.
После операции xor 1, последовательность будет выглядеть следующим образом:
0, 3, 2, 5, 4
После операции and 2, последовательность будет выглядеть следующим образом:
0, 2, 2, 0, 0