#P15103. [ICPC 2025 LAC] Infinite Arrays

[ICPC 2025 LAC] Infinite Arrays

说明

一个数组 BB子数组是指从 BB 中取出的一段连续元素序列。例如,如果 B=[3,1,4,1,5]B = [3, 1, 4, 1, 5],那么 [3,1,4][3, 1, 4][4,1][4, 1]、空数组 [][] 和整个数组 BB 都是 BB 的子数组(还有其他子数组),而 [3,4,5][3, 4, 5][1,3][1, 3] 不是 BB 的子数组。

我们还定义 CmC^m 为将数组 CC 连接 mm 份所得到的数组。例如,如果 C=[3,2]C = [3, 2],那么 C1=[3,2]C^1 = [3, 2]C2=[3,2,3,2]C^2 = [3, 2, 3, 2],且 C=[,3,2,3,2,3,2,]C^\infty = [\dots, 3, 2, 3, 2, 3, 2, \dots]

在这个问题中,你被给定一个不包含重复数字的数组 PP,并且你需要按顺序处理一系列事件。事件可以分为三种类型:

  • 删除:必须从 PP 中删除一个存在的数字。例如,如果 P=[2,3,4]P = [2, 3, 4] 且数字 33 需要被删除,处理完该事件后 PP 将变为 [2,4][2, 4]
  • 插入:必须将一个不存在于 PP 中的数字插入到 PP 中,并位于 PP 中某个现有数字之前。例如,如果 P=[4,3,2,1]P = [4, 3, 2, 1] 且数字 99 需要插入到数字 11 之前,处理完该事件后 PP 将变为 [4,3,2,9,1][4, 3, 2, 9, 1]
  • 查询:必须计算 PP^\inftyAA^\infty 之间的最长公共子数组的长度,其中 AA 是查询中给出的数组。例如,如果 P=[1,2,3,4]P = [1, 2, 3, 4]A=[3,2]A = [3, 2],那么 PP^\inftyAA^\infty 之间的最长公共子数组是 [2,3][2, 3],因此查询的答案是 22

你准备好迎接这个挑战了吗?

输入格式

第一行包含一个整数 NN1N51051 \le N \le 5 \cdot 10^5),表示 PP 的初始长度。

第二行包含 NN 个不同的整数 P1,P2,,PNP_1, P_2, \dots, P_N(对于 i=1,2,,Ni = 1, 2, \dots, N,有 1Pi1061 \le P_i \le 10^6)。

第三行包含一个整数 EE1E51051 \le E \le 5 \cdot 10^5),表示需要处理的事件数量。

接下来的 EE 行按顺序描述每个事件。每行的内容取决于事件类型,如下所示:

  • 删除:该行包含字符 “-”(减号)和一个整数 XX1X1061 \le X \le 10^6,且 XPX \in P),表示必须从 PP 中删除 XX。保证删除后 PP 不会变为空。
  • 插入:该行包含字符 “+”(加号)和两个整数 YYZZ1Y,Z1061 \le Y, Z \le 10^6YPY \notin P,且 ZPZ \in P),表示必须将 YY 插入到 PP 中,紧邻 ZZ 的左侧。
  • 查询:该行包含字符 “?”(问号)、一个正整数 KK 以及 KK 个整数 A1,A2,,AKA_1, A_2, \dots, A_K(对于 i=1,2,,Ki = 1, 2, \dots, K,有 1Ai1061 \le A_i \le 10^6),表示必须计算 PP^\inftyAA^\infty 之间的最长公共子数组的长度。保证输入中至少包含一个查询,并且所有查询的 KK 值之和不超过 10610^6

输出格式

对每个查询输出一行,包含一个整数,表示 PP^\inftyAA^\infty 之间的最长公共子数组的长度;或者,如果最长公共子数组的长度大于 101810^{18},则输出字符 “*”(星号)。

4
1 2 3 4
10
? 2 3 2
? 3 99 99 99
- 1
- 4
? 2 3 3
? 3 4 1 4
+ 64 3
+ 1 2
? 4 1 2 64 3
? 4 1 3 64 2
2
0
1
0
*
1
1
217
1
? 1 314
0

提示

翻译由 DeepSeek V3 完成