CF1083F The Fair Nut and Amusing Xor
题目描述
“Fair Nut” 有两个长度为 $n$ 的数组 $a$ 和 $b$。他已经拥有这两个数组很久了,甚至没人知道它们是什么时候到他手里的。
“Fair Nut” 经常会修改数组中的数字。他还很关心每次修改后,数组 $a$ 和 $b$ 有多相似。
我们定义两个数组的相似度为:将两个数组变为相同所需的最小操作次数(每次操作可以对两个数组都进行)。如果无法做到,则相似度为 $-1$。
每次操作,你可以选择一个长度为 $k$ 的子数组($k$ 是固定的),并将该子数组内的每个元素 $a_i$ 变为 $a_i \oplus x$($x$ 可自选),其中 $\oplus$ 表示[按位异或运算](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。
“Fair Nut” 已经计算出了每次修改后数组的相似度。你能做到吗?
注意,你只需要计算这些值,无需实际执行操作。
输入格式
第一行包含三个整数 $n$、$k$ 和 $q$($1 \le k \le n \le 2 \cdot 10^5$,$0 \le q \le 2 \cdot 10^5$),分别表示数组长度、每次操作的子数组长度和操作次数。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \le a_i < 2^{14}$),表示数组 $a$ 的元素。
第三行包含 $n$ 个整数 $b_1, b_2, \ldots, b_n$($0 \le b_i < 2^{14}$),表示数组 $b$ 的元素。
接下来的 $q$ 行,每行描述一次操作,包含一个字符串 $s$ 和两个整数 $p$、$v$($1 \le p \le n$,$0 \le v < 2^{14}$),$s$ 表示被修改的数组(“a” 或 “b”),$p$ 表示被修改元素的下标,$v$ 表示新值。
输出格式
第一行输出初始时数组 $a$ 和 $b$ 的相似度。
接下来的 $q$ 行,第 $i$ 行输出第 $i$ 次修改后数组 $a$ 和 $b$ 的相似度。
说明/提示
在第一个样例中,无法通过 $k=3$ 的操作将数组 $[0, 4, 2]$ 和 $[1, 2, 3]$ 变为相同。修改后,可以对整个第一个数组(长度等于 $k$)执行 $x=1$ 的操作,使其与第二个数组相同。
在第二个样例中,修改前可以对 $a$ 的子数组 $[1, 2]$ 执行 $x=1$ 的操作,对 $b$ 的子数组 $[2, 3]$ 执行 $x=2$ 的操作,使两个数组相同。
所有操作后,数组变为 $[0, 3, 2]$ 和 $[1, 0, 0]$。同样的操作可以使它们变为 $[1, 2, 2]$。
由 ChatGPT 4.1 翻译