#CF2185F. 战斗奶牛
战斗奶牛
题目描述
Farmer John 要派一头奶牛参加国际牛类奥林匹克,但他懒得写题,于是举办了一场战斗锦标赛。
有 头奶牛排成一行,第 头奶牛的技能值为 。每头奶牛初始时单独成一个栈,栈的技能值等于栈中所有奶牛技能值的异或和。例如,如果一个栈从下到上包含技能值为 的奶牛,则该栈技能值为 。
重复以下过程,直到只剩一个栈:
- 所有奇数位置的栈(第 、第 个等)与其右侧相邻栈战斗。
- 技能值更高的栈获胜;若平局,则位置更靠左的栈获胜。
- 获胜栈跳到失败栈上方,随后所有栈向左靠拢,不留下空位。
为了让比赛更有趣,Farmer John 准备了 瓶药水。第 瓶药水会把第 头奶牛的技能值改为 。每次试验中,他把第 瓶药水给第 头奶牛,然后运行锦标赛。对于每次试验,请输出最终栈中有多少头奶牛位于喝药水的奶牛上方。
药水很快失效,所以每次询问互相独立。
输入格式
第一行一个整数 ,表示测试组数。
每组测试数据第一行包含两个整数 ,其中 为奶牛数量, 为药水数量。
第二行包含 个整数 。
接下来 行,每行包含两个整数 ,表示喝药水的奶牛编号和新的技能值。
保证所有测试数据的 之和不超过 ,所有测试数据的 之和不超过 。
输出格式
对于每次试验,输出最终栈中位于喝药水奶牛上方的奶牛数量。
样例
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
0
0
1
5
0
2
3
1
样例说明
第一组第一次试验中:奶牛 和 战斗,奶牛 获胜,栈变为从下到上 ,技能值为 ;奶牛 和 战斗,奶牛 获胜,栈变为 ,技能值为 。最终两个栈技能值相同,左侧栈获胜,最终栈为 ,所以奶牛 上方有 头奶牛。
数据范围
- 所有测试数据的 之和不超过
- 所有测试数据的 之和不超过
来源
Codeforces Round 1074 (Div. 4), Problem F - BattleCows