#P15283. [MCO 2024] Knights

[MCO 2024] Knights

说明

NN 个骑士,编号 11NN,站成一排。第 ii 个骑士的力量为 PiP_i

骑士们正在参加一场马上枪术锦标赛。为此,每个骑士需要将他的剑指向左侧或右侧。若 Si=0S_i = 0,则第 ii 个骑士将剑指向左侧;若 Si=1S_i = 1,则指向右侧。其中 SS 是一个长度为 NN 的二进制字符串。

一场 枪术对决 定义为如下过程:

  1. 初始时所有骑士均存活。
  2. AA 为按编号升序排列的仍存活骑士的列表,mmAA 的大小。
  3. 对于 ii11mm,如果第 AiA_i 号骑士存在一个 力量更大 的相邻骑士,且该相邻骑士的剑尖指向第 AiA_i 号骑士的方向,则将第 AiA_i 号骑士标记为 死亡。形式化地,若满足以下任一条件,则第 AiA_i 号骑士将被标记为死亡:
    • i1>0i-1 > 0PAi1>PAiP_{A_{i-1}} > P_{A_{i}}SAi1=1S_{A_{i-1}} = 1
    • i+1mi+1 \leq mPAi+1>PAiP_{A_{i+1}} > P_{A_{i}}SAi+1=0S_{A_{i+1}} = 0
  4. 如果列表 AA 中至少有一个骑士被标记为死亡,则返回步骤 2。

现在,你将收到 QQ 个询问,每个询问的形式如下:

  • 给定整数 xx1xn1 \leq x \leq n),将 SxS_x 变为 1Sx1-S_x

在每次询问之后,请计算经过一场枪术对决后,仍存活的骑士数量。

注意,骑士不会在上一场对决中死亡后继续死亡(即每次对决都是独立的,初始状态均为所有骑士存活)。

输入格式

第一行包含两个以空格分隔的整数 NNQQ1N,Q1061 \le N, Q \le 10^6)—— 表示数组 PP 的长度和询问的数量。

第二行包含 NN 个以空格分隔的整数 P1,P2,,PnP_1, P_2, \ldots, P_n1PiN1 \le P_i \le N)。

第三行包含一个长度为 NN 的二进制字符串 SS

接下来 QQ 行,每行包含一个整数 xx1xN1 \le x \le N),表示将 SxS_x 变为 1Sx1-S_x 的询问。

输出格式

按顺序输出 QQ 行,每行一个整数 qiq_i,其中 qiq_i 表示在第 ii 次询问之后,执行一场枪术对决后仍存活的骑士数量。

5 3
2 1 3 4 3
11011
1
3
4
2
4
2
10 5
10 1 2 3 8 9 4 5 7 6
0111100110
10
5
6
5
1
5
5
3
6
1

提示

注释

在第一个样例输入中,第一次询问后,SS 变为 01011。

初始时,存活骑士(的编号)为 {1,2,3,4,5}\{1, 2, 3, 4, 5\}。经过第一轮迭代后,剩余的骑士为 {1,3,4}\{1,3,4\}。经过第二轮迭代后,剩余的骑士为 {3,4}\{3, 4\}。经过第三轮迭代后,没有新的骑士死亡,因此一场枪术对决后剩余 2 名骑士。

第二次询问后,SS 变为 01111。

经过第一轮迭代后,剩余的骑士为 {2,3,4,5}\{2,3,4,5\}。经过第二轮迭代后,没有新的骑士死亡,因此一场枪术对决后剩余 4 名骑士。

计分

子任务 166 分): N,Q500N, Q \le 500

子任务 299 分): 对于 1i<N1 \le i < N,有 PiPi+1P_i \leq P_{i+1}

子任务 31717 分): 若 iji \neq j,则 PiPjP_i \neq P_j,且保证每个询问的答案不超过 5050

子任务 41919 分): 若 iji \neq j,则 PiPjP_i \neq P_j

子任务 51919 分): N,Q10000N, Q \leq 10000

子任务 63030 分): 无额外限制

翻译由 DeepSeek 完成