A90648.Eating
普及+/提高
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
有 n 个史莱姆排成一行,第 i 个史莱姆的体重为 wi。当史莱姆 i 满足 wi≥wj 时,它可以吃掉史莱姆 j;之后,史莱姆 j 会消失,史莱姆 i 的体重将变为 wi⊕wj ∗。
史莱姆国王希望进行一个参数为 x 的实验,步骤如下:
- 在行的最右端(第 n 个史莱姆之后)新增一个体重为 x 的史莱姆。
- 这个新史莱姆会不断尝试吃掉左侧相邻的史莱姆(如果可能的话),并移动到被吃掉的史莱姆的位置。当左侧没有史莱姆或其左侧史莱姆的体重大于自身时,该过程停止。(此过程中不会有其他史莱姆被吃掉)
- 该实验的得分为被吃掉的史莱姆总数。
史莱姆国王将向你提出 q 次询问。每次询问给定一个整数 x,你需要计算以该参数进行实验的得分。
注意这些询问是假设性的,并不会实际改变史莱姆的初始状态(即查询是非持久化的)。
∗ 此处 ⊕ 表示按位异或运算。
输入格式
第一行包含一个整数 t(1≤t≤104)——测试用例数量。
每个测试用例的第一行包含两个整数 n 和 q(1≤n,q≤2⋅105)——分别表示初始史莱姆数量和询问次数。
接下来一行包含 n 个整数 w1,w2,…,wn(1≤wi<230)——初始史莱姆的体重。
接下来 q 行每行包含一个整数 x(1≤x<230)——实验参数。
所有测试用例的 n 之和不超过 2⋅105,q 之和不超过 2⋅105。
输出格式
对于每个询问,输出一个整数表示实验得分。
输入输出样例
输入#1
3 1 1 5 6 4 4 1 5 4 11 8 13 16 15 10 9 10 4 3 9 7 4 6 1 9 4 2 6 5 6 9 8 6 2 7
输出#1
1 0 2 4 2 0 1 1 1 3 3 1 0 1
说明/提示
第二个测试用例的第一个查询:
- 新增体重为 8 的史莱姆后,数组变为 [1,5,4,11,8]。
- 新增史莱姆体重小于左侧史莱姆,无法吃掉,最终得分为 0。
第二个测试用例的第二个查询:
- 新增体重为 13 的史莱姆后,数组变为 [1,5,4,11,13]。
- 新增史莱姆吃掉左侧史莱姆,体重变为 13⊕11=6,数组变为 [1,5,4,6]。
- 新增史莱姆继续吃掉左侧史莱姆,体重变为 6⊕4=2,数组变为 [1,5,2]。
- 此时无法继续吃掉左侧史莱姆,最终得分为 2。