F. [R19F]操作序列

    Type: Default 2000ms 512MiB

[R19F]操作序列

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

时空限制

2S/512M

题目描述

给定一个操作序列和一个初始为空的集合 SS。操作序列包含以下两种类型:

操作 11:向集合 SS 中添加一个数 xx

操作 22:从集合 SS 中删除所有值为 xx 的数(如果 SS 内没有 xx ,则什么都不做)。

现有 QQ 次查询。每次查询给出一个区间 [l,r][l, r],要求计算依次执行操作序列中第 ll 到第 rr 个操作后,集合 SSmex\text{mex}(最小未出现非负整数)值。

apiadu 觉得这个问题太简单了。故对于每次查询 [l,r][l, r],他可以在该区间内选择两个位置 i,ji, j(满足 li<jrl\leq i < j\leq r)并交换这 i,ji,j 两个位置的操作,你的目标是帮助 apiadu 选择 i,ji ,j 使最终集合 mex(S)\text{mex} {(S)} 值最大。你只需要输出最大的 mex(S)\text{mex} {(S)} 即可。(每次询问独立,即交换操作不影响后续的询问,同时 apiadu 也可以选择不交换。)

mex(S)\text{mex} {(S)} 表示 SS 中最小未出现的非负整数。例如 mex({1,2,3})=0\text{mex}{(\{1,2,3\})} = 0mex({0,1,2})=3\text{mex}{(\{0,1,2\})} = 3mex({0,1,3})=2\text{mex}{(\{0,1,3\})} = 2

格式

输入格式

本题有多组测试数据。

第一行含有一个正整数 TT,表示数据组数。

对于每组数据,第一行含有 22 个正整数 n,Qn , Q,表示操作序列的长度和询问次数。

接下来 nn 行,每行含有 22 个整数 opi,xiop_i ,x_iopi=1op_i = 1 表示添加操作(添加数 xix_i)。opi=2op_i = 2 表示删除操作(删除所有值为 xix_i 的数)。

接下来 QQ 行,每行输入两个整数 li,ril_i, r_i,表示一次查询区间 [li,ri][l_i, r_i]

输出格式

对于每次查询,输出一行一个整数,表示 apiadu 通过选择交换两个位置操作后能得到的最大 mex(S)\text{mex} {(S)}

样例

样例输入 #1

2
3 2
1 0
2 0
1 1
1 3
2 3
2 1
1 1
1 0
1 2

样例输出 #1

2
0
2

样例解释 #1

对于第一组测试数据:

  • 第一个询问 [1,3][1,3],只需要将第 11 个操作与第 22 个操作交换,得到 S={0,1}S = \{ 0 , 1\}mex({0,1})=2\text{mex} (\{0 ,1 \}) = 2

  • 第二个询问 [2,3][2,3],无论怎样交换都会得到 S={1}S = \{1\}mex({1})=0\text{mex} (\{1 \}) = 0

数据规模

对于 10%10\% 的测试数据,1T,n,Q101 \leq T , n, Q \leq 10

对于 30%30\% 的测试数据,1T,n,Q1001 \leq T , n, Q \leq 100

对于 100%100\% 的测试数据,1n,Q5×1051 \leq n , Q \leq 5 \times 10^51T1001 \leq T \leq 100n5×105\sum n \leq 5 \times 10^5Q5×105\sum Q \leq 5 \times 10^5opi{1,2}op_i \in \{1, 2\}0ain0 \leq a_i \leq n1lrn1 \leq l \leq r \leq n

代码源挑战赛 Round 19

Not Attended
Status
Done
Rule
DMY
Start at
2025-7-4 20:00
End at
2025-7-4 21:30
Duration
1.5 hour(s)
Host
Partic.
524