#abc228d. [abc228_d]Linear Probing

[abc228_d]Linear Probing

题目描述

有一个由 N=220N = 2^{20} 个项构成的序列 A=(A0,A1,,AN1)A = (A_0, A_1, \dots, A_{N - 1})。初始时,每个项都是 \-1\-1

按顺序执行 QQ 个查询。第 ii 个查询(1iQ1 \leq i \leq Q)由整数 tit_i 和另一个整数 xix_i 描述如下:

  • 如果 ti=1t_i = 1,按顺序执行以下操作。
    1. 将整数 hh 定义为 h=xih = x_i
    2. AhmodN1A_{h \bmod N} \neq -1 时,不断将 hh 增加 11。我们可以证明,在本问题的约束条件下,此过程会在有限次迭代之后结束。
    3. xix_i 替换 AhmodNA_{h \bmod N} 的值。
  • 如果 ti=2t_i = 2,则在此时打印出 AximodNA_{x_i \bmod N} 的值。

这里,对于整数 aabbamodba \bmod b 表示 aa 除以 bb 的余数。

约束条件

  • 1Q2×1051 \leq Q \leq 2 \times 10^5
  • ti{1,2}(1iQ)t_i \in \{ 1, 2 \} \, (1 \leq i \leq Q)
  • 0xi1018(1iQ)0 \leq x_i \leq 10^{18} \, (1 \leq i \leq Q)
  • 至少有一个 ii 满足 ti=2t_i = 2
  • 输入中的所有值都是整数。

输入

从标准输入获取以下格式的输入:

QQ t1t_1 x1x_1 \vdots tQt_{Q} xQx_{Q}

输出

对于每个满足 ti=2t_i = 2 的查询,打印出一行响应。保证至少存在一个此类查询。

示例输入 1

4
1 1048577
1 1
2 2097153
2 3

示例输出 1

1048577
-1

我们有 x1modN=1x_1 \bmod N = 1,所以第一个查询将 A1A_1 设置为 10485771048577

在第二个查询中,初始时我们有 h=x2h = x_2,其中 AhmodN=A11A_{h \bmod N} = A_{1} \neq -1,所以我们将 hh 增加 11。现在我们有 AhmodN=A2=1A_{h \bmod N} = A_{2} = -1,因此此查询将 A2A_2 设置为 11

在第三个查询中,我们打印 Ax3modN=A1=1048577A_{x_3 \bmod N} = A_{1} = 1048577

在第四个查询中,我们打印 Ax4modN=A3=1A_{x_4 \bmod N} = A_{3} = -1

注意,在该问题中,N=220=1048576N = 2^{20} = 1048576 是一个常数,不在输入中给出。