QOJ 6504 Flower's Land
巧妙!
简要题意
一个序列包含 \(0, 1, 2\),有两种操作:
- 给定区间 \([l, r]\),令其中所有 \(a_i\gets (a_i + 1)\bmod 3\)。
- 给定区间 \([l, r]\),问如果每次删去该区间内的两个相邻相等元素,最终能不能将其删空。
\(1 \le n,q \le 5\times10^5\)。
解法
随机三个矩阵 \(A_0, A_1, A_2\),并求出它们各自的逆(大概率有)。容易得出合法串长度一定为偶数,所以两个元素如果配对,那么它们位置的奇偶性不同。那么,给奇数位置放上 \(A_{a_i}\),偶数位置放上 \(A_{a_i}^{-1}\)。假设 \(A_0, A_1, A_2\) 两两不可交换,那么当一个区间的矩阵乘积为 \(I\) 时可以断言这个串大概率合法;否则一定不合法。矩阵乘积直接用线段树维护,对于每个节点,维护它所代表区间内轮换 \(0, 1, 2\) 次以后的矩阵乘积,那么很容易实现操作 \(1\)。
随机两个矩阵它们大概率不可交换,即使矩阵大小只有 \(2\) 也是如此。然而这个结论我不太会证明。如果实在不放心,矩阵稍微搞大点即可。