CF2185F.BattleCows
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
农夫 John 要派一头奶牛去参加国际牛类奥林匹克竞赛,但他太懒得给比赛出题,于是选择了另一种看似合理的方式:举办一场搏斗锦标赛!
农夫 John 有 2n 头奶牛排成一排,第 i 头奶牛的技能值为 ai。每头奶牛一开始都在只包含自己的堆中,堆的技能值等于其中所有奶牛技能值的异或和∗。例如,如果某个堆从下到上依次为第 1,3,9 号奶牛,则该堆的技能值为 1⊕3⊕9=11。
以下过程会反复进行,直到只剩下一个堆为止:
- 所有奇数位置(第 1 个、第 3 个等)的堆会与其右侧的堆进行对决。例如,第 1 个堆会与第 2 个堆对决,第 3 个堆会与第 4 个堆对决,依此类推。
- 技能值更高的堆获胜;若技能值相等,则编号较小的左边堆获胜。
- 获胜的堆会跳到失败的堆顶部,并且所有堆会依次向左移动,使得中间没有空挡。
为了让比赛更加精彩,农夫 John 准备了 q 瓶魔药,第 i 瓶魔药会将喝下它的奶牛的技能值设为 ci。农夫 John 想在奶牛身上测试他的魔药,因此他让第 i 瓶药被编号为 bi 的奶牛喝下,并随后举办锦标赛。对于每次试验,农夫 John 想知道喝下魔药的那头奶牛,在最终的堆中上方有多少头奶牛。
农夫 John 的魔药效果消散得很快,因此比赛结束时,喝下魔药的奶牛的技能值会恢复成原来的值。换句话说,所有询问都是独立的。
∗ 一个数组 x1,x2,…,xy 的异或和定义为 x1⊕x2⊕x3…xy−1⊕xy,其中 ⊕ 表示按位异或运算。
输入格式
输入的第一行为一个整数 t(1≤t≤104)——表示测试用例的数量。
每个测试用例的第一行为两个整数 n 和 q(1≤n≤18,1≤q≤2⋅105) —— 其中 2n 是锦标赛中的奶牛数量,q 是魔药数量。
第二行包含 2n 个整数 a1,a2,…,a2n(1≤ai≤230)——表示每头奶牛的技能值。
接下来的 q 行,每行包含两个整数 bi 和 ci(1≤bi≤2n,1≤ci≤230)——表示喝下魔药的奶牛编号和它的新技能值。
保证所有测试用例中 ∑2n≤218=262144,且 ∑q≤2⋅105。
输出格式
对于每次试验,输出一个整数,表示锦标赛结束后,喝下魔药的奶牛在最终堆中上方有多少头奶牛。
输入输出样例
输入#1
4 2 2 1 3 5 7 1 1 4 8 1 2 1 3 1 4 1 2 3 4 1 8 3 10 2 5 7 1 5 3 8 12 1 9 2 1 2 1 1 2 3 4 3 1
输出#1
1 0 0 1 5 0 2 3 1
说明/提示
以下是第一个测试用例第一轮的比赛过程,奶牛的技能值没有改变,对阵如下:
- 奶牛 1 与奶牛 2 对决。由于奶牛 2 的技能值高于奶牛 1,奶牛 2 获胜,其堆为 1,2,堆的技能值为 3⊕1=2。
- 奶牛 3 与奶牛 4 对决。由于奶牛 4 的技能值高于奶牛 3,奶牛 4 获胜,其堆为 3,4,堆的技能值为 7⊕5=2。
- 剩下的两个堆对决。两个堆的技能值相等,则左边堆获胜,最终堆为 3,4,1,2,堆的技能值为 2⊕2=0。
由于魔药给了第 1 号奶牛,答案为 1,因为上方有一头奶牛。可视化如下图所示:

对于第一个测试用例的第二轮,奶牛 4 的技能值变为 8,对阵如下:
- 奶牛 1 与奶牛 2 对决。仍然是奶牛 2 获胜,堆为 1,2,堆技能值为 3⊕1=2。
- 奶牛 3 与奶牛 4 对决。奶牛 4 的技能值高于奶牛 3,因此 4 号奶牛获胜,堆为 3,4,堆技能值为 8⊕5=13。
- 剩下两个堆对决。第二个堆的技能值更高,最终堆为 1,2,3,4,堆的技能值 2⊕13=15。
由于魔药给了第 4 号奶牛,答案为 0,因为上方没有奶牛。