CF1083F The Fair Nut and Amusing Xor
题意
给定两个长度为 \(n\) 的数列 \(a, b\),规定每次操作为选取一段长度为 \(k\) 的子段异或上任意自然数。
对于每次查询,先单点修改 \(a\) 或 \(b\),你需要求出最小的操作次数,或无法使得 \(a\) 在若干次操作后变为 \(b\)。
\(n \le 2 \times 10 ^ 5\)
Sol
差个分先,区间异或变为 \(i\) 与 \(i + k\) 异或。
套路的,对于 \(mod k\) 分组,拉出来 \(k\) 条链,问题转化为对于每条链,相邻两个数同时异或 \(x\),使得数列全部变为 \(0\)。
然后你不难发现,无解情况就是每条链地前缀异或最后不为 \(0\)。
显然直接从前往后就是最优策略,而操作次数就是 \(n\) 减去前缀异或值为 \(0\) 的个数。
直接上个分块,\(O(n \sqrt n)\) 做完了。