atcoder#ABC228D. [ABC228D] Linear Probing

[ABC228D] Linear Probing

配点 : 400400

問題文

N=220N = 2^{20} 項からなる数列 A=(A0,A1,,AN1)A = (A_0, A_1, \dots, A_{N - 1}) があります。はじめ、全ての要素は 1-1 です。

QQ 個のクエリを順番に処理してください。i(1iQ)i \, (1 \leq i \leq Q) 個目のクエリは ti=1t_i = 1 または ti=2t_i = 2 を満たす整数 tit_i および整数 xix_i で表され、内容は以下の通りです。

  • ti=1t_i = 1 のとき、以下の処理を順番に行う。1. 整数 hhh=xih = x_i で定める。 2. AhmodN1A_{h \bmod N} \neq -1 である間、hh の値を 11 増やすことを繰り返す。この問題の制約下でこの操作が有限回で終了することは証明できる。 3. AhmodNA_{h \bmod N} の値を xix_i で書き換える。
  • ti=2t_i = 2 のとき、その時点での AximodNA_{x_i \bmod N} の値を出力する。

なお、整数 a,ba, b に対し、aabb で割った余りを amodba \bmod b と表します。

制約

  • 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)
  • ti=2t_i = 2 であるような i(1iQ)i \, (1 \leq i \leq Q)11 つ以上存在する。
  • 入力は全て整数である。

入力

入力は以下の形式で標準入力から与えられる。

QQ

t1t_1 x1x_1

\vdots

tQt_{Q} xQx_{Q}

出力

ti=2t_i = 2 であるようなクエリに対し、それぞれ答えを 11 行に出力せよ。そのようなクエリが 11 つ以上存在することは保証される。

4
1 1048577
1 1
2 2097153
2 3
1048577
-1

x1modN=1x_1 \bmod N = 1 であるので、11 番目のクエリによって A1=1048577A_1 = 1048577 となります。

22 番目のクエリにおいて、はじめ h=x2h = x_2 ですが、AhmodN=A11A_{h \bmod N} = A_{1} \neq -1 であるので hh の値を 11 増やします。すると AhmodN=A2=1A_{h \bmod N} = A_{2} = -1 となるので、このクエリによって A2=1A_2 = 1 となります。

33 番目のクエリにおいて、Ax3modN=A1=1048577A_{x_3 \bmod N} = A_{1} = 1048577 を出力します。

44 番目のクエリにおいて、Ax4modN=A3=1A_{x_4 \bmod N} = A_{3} = -1 を出力します。

この問題において N=220=1048576N = 2^{20} = 1048576 は定数であり、入力では与えられないことに注意してください。