luogu#P10856. 【MX-X2-T5】「Cfz Round 4」Xor-Forces

【MX-X2-T5】「Cfz Round 4」Xor-Forces

题目背景

✿(。◕ᴗ◕。)✿

题目描述

给定一个长度为 n=2kn=2^k 的数组 aa,下标从 00 开始,维护 mm 次操作:

  1. 操作一:给定 xx,设数列 aa' 满足 ai=aixa'_i=a_{i\oplus x},将 aa 修改为 aa'。其中 \oplus 表示按位异或运算。
  2. 操作二:给定 l,rl,r,查询 aa 的下标在 l,rl,r 之间的子数组有多少颜色段。不保证 lr\bm {l\le r},若 l>r\bm{l > r},请自行交换 l,r\bm{l,r}

其中,一个极长的所有数都相等的子数组称为一个颜色段。

部分测试点要求强制在线。

输入格式

第一行三个整数 T,k,mT,k,m,其中 T{0,1}T \in \{ 0, 1 \} 为决定是否强制在线的参数。

第二行 nn 个整数 a0,,an1a_0, \ldots, a_{n-1}

接下来 mm 行,每行两或三个整数,描述一次操作。第一个整数 op\mathit{op} 表示操作类型。

  • op=1op=1,为操作一,接下来一个整数 xx',满足 x=x(T×lst)x=x'\oplus(T\times \mathit{lst})
  • op=2op=2,为操作二,接下来两个整数 l,rl',r',满足 l=l(T×lst)l=l'\oplus(T\times \mathit{lst})r=r(T×lst)r=r'\oplus(T\times \mathit{lst})不保证 lr\bm{l \le r},若 l>r\bm{l > r},请自行交换 l,r\bm{l, r}
  • 其中 lst\mathit{lst} 表示上次询问的答案。特别地,如果此前没有询问操作,则 lst=0\mathit{lst}=0

输出格式

输出若干行,每行包含一个整数,依次表示每个询问的答案。

0 3 3
1 2 1 3 2 4 5 1
2 1 5
1 3
2 5 1
5
4
1 3 3
1 2 1 3 2 4 5 1
2 1 5
1 6
2 0 4
5
4
1 4 16
12 9 5 9 12 12 9 12 9 16 5 9 12 16 9 5
2 0 4
1 15
2 14 0
1 15
2 6 0
2 4 14
1 0
1 14
2 4 10
2 6 3
1 7
2 4 13
1 3
1 3
2 4 3
2 15 2
5
7
4
7
9
5
7
2
11

提示

【样例解释 #1】

此样例允许离线。

初始时 a=[1,2,1,3,2,4,5,1]a=[1,2,1,3,2,4,5,1]

aa 的下标在 1,51,5 之间的子数组为 [2,1,3,2,4][2,1,3,2,4],它的颜色段数为 55

进行重排操作后,a=[3,1,2,1,1,5,4,2]a=[3,1,2,1,1,5,4,2]

aa 的下标在 5,15,1 之间的子数组为 [1,2,1,1,5][1,2,1,1,5],它的颜色段数为 44

【样例解释 #2】

此样例除强制在线外,与样例 #1 完全一致。

【数据范围】

对于所有测试数据,T{0,1}T \in \{ 0, 1 \}0k180\le k\le 18n=2kn=2^k1m2×1051\le m\le 2\times 10^51ain1\le a_i\le nop{1,2}\mathit{op} \in \{ 1, 2 \}0x,l,r<n0\le x,l,r < n

本题采用捆绑测试。

  • Subtask 1(15 points):T=1T=1k10k\le 10m103m\le 10^3
  • Subtask 2(15 points):T=1T=1,不存在操作一。
  • Subtask 3(20 points):T=1T=1,对于所有操作二,要么 l=0,r=n1l=0,r=n-1,要么 l=n1,r=0l=n-1,r=0
  • Subtask 4(20 points):T=0T=0
  • Subtask 5(30 points):T=1T=1

注意:Subtask 5 依赖前四个 Subtask,只有通过前四个 Subtask 才能尝试获得该 Subtask 的分数。