Побітова імплікація
Limits: 3 sec., 256 MiB
У Зеника є набір із n чисел, кожне з яких є k-бітовим. Іншими словами, кожне з чисел в межах [0,2k).
Зеника цікавить операція побітової імплікації x→y=(2k−1−x) OR y, де OR – операція побітового АБО. Зеник виконує наступну дію поки не залишиться одне число: взяти 2 числа x, y з поточного набору, видалити їх та додати x→y.
Марічці цікаво, яку мінімальну кількість одиничних бітів може мати число, яке залишилось в результаті операцій Зеника.
Але все не так просто, Марічка вирішила задавати Зенику два типи запитів:
Змінити значення apos на val.
Порахувати, яку мінімальну кількість одиничних бітів може мати фінальне число, якщо в початковому наборі всі числа al,al+1,…,ar.
Допоможіть Зенику розв’язати таку задачу.
Input
У першому рядку задано 3 цілих числа n, k, q — кількість чисел, кількість бітів в кожному числі та кількість запитів Марічки.
У наступному рядку задано n цілих чисел ai.
У наступних q рядках задано запити у наступному форматі:
1 pos val – запит першого типу означає, що потрібно змінити значення apos на val.
2 l r – запит другого типу означає, що потрібно порахувати відповідь для початкового набору al,al+1,…,ar.
Output
Для кожного запиту другого типу виведіть мінімальну кількість одиничних бітів.
Constraints
1≤n,q≤2⋅105,
1≤k≤30,
0≤ai,val<2k,
1≤pos≤n, 1≤l≤r≤n.
Samples
Input (stdin) | Output (stdout) |
---|---|
4 3 7 4 3 2 1 2 2 2 2 1 4 1 4 6 1 3 7 2 3 4 1 1 0 2 1 4 | 2 1 2 0 |
Notes
Розглянемо операції з прикладу:
Порахувати відповідь для лише другого значення [3], у ньому 2 одиничні біти.
Порахувати відповідь для усіх значень, одне з можливих останніх значень є 2, у якому 1 одиничний біт.
Змінити четверте значення на 6, тепер масив рівний [4, 3, 2, 6].
Змінити третє значення на 7, тепер масив рівний [4, 3, 7, 6].
Порахувати відповідь для значень [7, 6]. Можна отримати значення 6, у якому 2 одиничних біти.
Змінити перше значення на 0, тепер масив рівний [0, 3, 7, 6].
Порахувати відповідь для всіх значень, цього разу можливо отримати фінальне значення 0.