题目本质: 有一个可动态删减的序列,指令依次指定“初始下标”的元素进入“向左合并”状态:
关键点:
你有一个初始整数序列,序列中每个位置都有一个从 0 开始编号的位置标识,用来指向该位置上的数字。即使两个位置上的数字数值相同,它们仍然具有不同的位置标识。
游戏开始后,你会依次收到若干条指令。每条指令给出一个位置标识。如果该标识对应的数字在当前序列中仍然存在,这个数字就会进入“需要合并”状态,并按以下规则处理:
规则 1:对于当前处于“需要合并”状态的数字,检查它左侧相邻的数字。如果左侧数字的值与它相同,则将两个数字合并成一个新数字,新数字的值等于该相同值加 1。
规则 2:合并后得到的数字继续保持“需要合并”状态,并继续尝试与左侧相邻数字合并,直到左侧没有数字,或左侧相邻数字的值与它不同。
规则 3:合并产生的新数字没有对应的初始位置标识,因此无法被后续指令直接选中。但它仍然可以作为普通数字参与后续合并,并在规则 2 的连锁过程中获得“需要合并”状态。
在所有指令处理完成后,你需要回答序列中最后剩余的数字数量。
约束条件
第一行包含一个整数 N,表示初始序列中数字的个数。
第二行包含 N 个整数 X0,X1,…,XN−1,表示初始序列从左到右的数字。
第三行包含一个整数 M,表示指令的个数。
第四行包含 M 个整数 Y0,Y1,…,YM−1,表示依次收到的位置标识。
输出一行,包含一个整数,表示所有指令处理完成后序列中剩余的数字数量。
输入
3
3 2 2
2
2 1
输出
1
说明
初始序列为 [3,2,2]。第一条指令选中位置 2,即最右侧的数字 2。
该数字与左侧相邻数字 2 值相同,合并得到 3。新数字继续向左检查,发现左侧数字也是 3,于是再次合并,得到 4。
此时左侧没有数字,合并停止,序列变为 [4],长度为 1。
第二条指令选中位置 1,但该位置对应的原始数字已经在合并过程中消失,因此不产生任何操作。
最终剩余数字数量为 1。
输入
4
1 1 1 1
3
3 0 1
输出
2
说明
初始序列为 [1,1,1,1]。第一条指令选中位置 3,即最右侧的数字 1。
它与左侧相邻数字 1 合并,得到 2,序列变为 [1,1,2]。
第二条指令选中位置 0,该位置数字 1 左侧没有数字,因此不合并。
第三条指令选中位置 1,该位置数字 1 与左侧数字 1 合并,得到 2,序列变为 [2,2]。
虽然最后两个数字值相同且相邻,但指令处理已经结束,不会继续自动合并,因此最终长度为 2。
输入
10
3 1 1 2 4 2 2 3 3 4
8
2 3 4 6 8 9 1 7
输出
3
说明

Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册