/
実行時間制限: 5 sec / メモリ制限: 1024 MiB
配点 : 100 点
問題文
正整数 N, K, x \ (1 \leq x \leq N) 及び (1,2,\ldots,N) の順列 P=(P_1,P_2,\ldots,P_N) に対して、整数 f(P,K,x) を以下のように定義します。
長さ N+2 の数列 A=(A_0,A_1,\ldots,A_{N+1}) を用意し、すべての要素を 1 とする。 その後、i=0, 1, \ldots, KN-1 の順に以下の操作を行う。
- j = P_{(i \bmod N) + 1} とする。A_j を \lfloor\frac{A_{j-1}A_{j+1}}{A_j}\rfloor+1 に置き換える。
すべての操作を終えた後の A_x の値を f(P,K,x) とする。
正整数 N 及び (1,2,\ldots,N) の順列 P=(P_1,P_2,\ldots,P_N) が与えられます。 Q 個のクエリが与えられるので、与えられた順に処理してください。 各クエリは以下の 2 種類のいずれかです。
- タイプ 1:
1 i jの形式で与えられる。P_i と P_j の値を入れ替える。 - タイプ 2:
2 K xの形式で与えられる。現在の P に対する f(P,K,x) を 998244353 で割った余りを求める。
制約
- 2 \leq N \leq 2 \times 10^5
- 1 \leq P_i \leq N
- P_i \neq P_j \ (i \neq j)
- 1 \leq Q \leq 2 \times 10^5
- タイプ 1 のクエリにおいて、1 \leq i < j \leq N
- タイプ 2 のクエリにおいて、1 \leq K \leq 10^{18}
- タイプ 2 のクエリにおいて、1 \leq x \leq N
- 少なくとも 1 つのタイプ 2 のクエリが含まれる
- 入力される数値はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
N
P_1 P_2 \ldots P_N
Q
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q
ここで \mathrm{query}_k は k 番目のクエリであり、以下のいずれかの形式で与えられる。
1 i j
2 K x
出力
タイプ 2 のクエリの個数を q として、q 行出力せよ。 k 行目には k 番目のタイプ 2 のクエリに対する答えを出力せよ。
入力例 1
4 3 1 2 4 9 2 1 1 2 1 2 2 1 3 2 1 4 1 2 3 2 2 1 2 2 2 2 2 3 2 2 4
出力例 1
2 5 2 3 2 7 5 2
はじめ、P = (3,1,2,4) です。
1 \sim 4 番目のクエリでは、P と K が共通なので、数列 A の変化も共通です。 各クエリでは A = (1,1,1,1,1,1) から始めて、以下のように操作が進みます。
- A_3 を \lfloor\frac{A_2A_4}{A_3}\rfloor + 1 = 2 に置き換える。A = (1,1,1,2,1,1) となる。
- A_1 を \lfloor\frac{A_0A_2}{A_1}\rfloor + 1 = 2 に置き換える。A = (1,2,1,2,1,1) となる。
- A_2 を \lfloor\frac{A_1A_3}{A_2}\rfloor + 1 = 5 に置き換える。A = (1,2,5,2,1,1) となる。
- A_4 を \lfloor\frac{A_3A_5}{A_4}\rfloor + 1 = 3 に置き換える。A = (1,2,5,2,3,1) となる。
したがって、f(P, 1, 1) = 2, \ f(P, 1, 2) = 5, \ f(P, 1, 3) = 2, \ f(P, 1, 4) = 3 となります。
5 番目のクエリで P_2 と P_3 が入れ替わり、P = (3,2,1,4) となります。
6 \sim 9 番目のクエリでは、P と K が共通なので、数列 A の変化も共通です。 各クエリでは A = (1,1,1,1,1,1) から始めて、以下のように操作が進みます。
- A_3 を \lfloor\frac{A_2A_4}{A_3}\rfloor + 1 = 2 に置き換える。A = (1,1,1,2,1,1) となる。
- A_2 を \lfloor\frac{A_1A_3}{A_2}\rfloor + 1 = 3 に置き換える。A = (1,1,3,2,1,1) となる。
- A_1 を \lfloor\frac{A_0A_2}{A_1}\rfloor + 1 = 4 に置き換える。A = (1,4,3,2,1,1) となる。
- A_4 を \lfloor\frac{A_3A_5}{A_4}\rfloor + 1 = 3 に置き換える。A = (1,4,3,2,3,1) となる。
- A_3 を \lfloor\frac{A_2A_4}{A_3}\rfloor + 1 = 5 に置き換える。A = (1,4,3,5,3,1) となる。
- A_2 を \lfloor\frac{A_1A_3}{A_2}\rfloor + 1 = 7 に置き換える。A = (1,4,7,5,3,1) となる。
- A_1 を \lfloor\frac{A_0A_2}{A_1}\rfloor + 1 = 2 に置き換える。A = (1,2,7,5,3,1) となる。
- A_4 を \lfloor\frac{A_3A_5}{A_4}\rfloor + 1 = 2 に置き換える。A = (1,2,7,5,2,1) となる。
したがって、f(P, 2, 1) = 2, \ f(P, 2, 2) = 7, \ f(P, 2, 3) = 5, \ f(P, 2, 4) = 2 となります。
入力例 2
5 3 4 5 2 1 15 1 4 5 1 3 5 2 8 1 2 10 1 2 10 4 2 3 3 2 8 5 1 2 3 2 6 4 2 8 1 1 3 4 2 4 3 1 2 3 2 6 2 2 4 5
出力例 2
1 2 7 10 1 7 1 1 11 2
入力例 3
10 2 3 8 9 10 5 4 7 6 1 20 2 100000 8 2 1000000 4 2 10000000 9 2 100000000 7 2 1000000000 6 2 10000000000 1 2 100000000000 1 2 1000000000000 7 1 5 9 1 7 8 1 6 10 2 10000000000000 5 1 2 7 2 100000000000000 6 2 1000000000000000 6 2 10000000000000000 2 2 100000000000000000 5 1 5 8 1 6 9 2 1000000000000000000 6
出力例 3
18 7 11 43 2 3 4 3 40 39 3 3 22 3