I - Bubble Sort Problems
問題文
$(1, 2, \cdots, N)$ の順列 $P$ があり、時刻 $0$ の時点で $P = (P_1, P_2, \cdots, P_N)$ です。
各時刻 $t = 1, 2, 3, \cdots 10^{100}$ に以下の操作が行われます。
整数 $i$ を、 $i \equiv t ~ (\mathrm{mod} ~ N - 1)$ かつ $1 \leq i \leq N - 1$ を満たす値とする。
$P$ の $i$ 番目の値が $i + 1$ 番目の値よりも大きいならば、これらの値を入れ替える。そうでない場合、何も行わない。
$Q$ 個の独立した質問が与えられるので、それぞれについて答えてください。
$k ~ (1 \leq k \leq Q)$ 番目の質問は $X_k \lt Y_k$ を満たす整数の組 $(X_k, Y_k)$ を用いて以下のように説明されます。
次の条件をはじめて満たす時刻を求めてください。
- $P$ の $i$ 番目の値が $X_k$ 、 $j$ 番目の値が $Y_k$ であるとき、 $i < j$ である。
ただし、時刻 $0$ の時点ですでに条件を満たす場合、 $0$ と答えてください。
制約
- $2 \leq N \leq 500{,}000$
- $1 \leq Q \leq 100{,}000$
- $(P_1, P_2, \cdots, P_N)$ は $(1, 2, \cdots, N)$ の順列
- $1 \leq X_k \lt Y_k \leq N$
- 入力はすべて整数
部分点
- $N \leq 2{,}000$ を満たすデータセットに正解した場合は $50$ 点が与えられる。
入力
入力は以下の形式で標準入力から与えられる。
$N$ $Q$
$P_1$ $P_2$ $\ldots$ $P_N$
$X_1$ $Y_1$
$X_2$ $Y_2$
$\vdots$
$X_Q$ $Y_Q$
出力
$Q$ 行出力せよ。 $k ~ (1 \leq k \leq Q)$ 行目には $k$ 番目の質問についての答えを整数で出力せよ。
4 3
3 1 4 2
2 4
1 2
2 3
3
0
5
以下の流れで操作が行われます。時刻 $0$ の時点では $P = (3, 1, 4, 2)$ です。
- 時刻 $1$ の時点で、 $P_1 > P_2$ のためこれらを入れ替えます。 $P = (1, 3, 4, 2)$ となります。
- 時刻 $2$ の時点で、 $P_2 < P_3$ のため何も行いません。
- 時刻 $3$ の時点で、 $P_3 > P_4$ のためこれらを入れ替えます。 $P = (1, 3, 2, 4)$ となります。
- 時刻 $4$ の時点で、 $P_1 < P_2$ のため何も行いません。
- 時刻 $5$ の時点で、 $P_2 > P_3$ のためこれらを入れ替えます。 $P = (1, 2, 3, 4)$ となります。
- 時刻 $6$ の時点で、 $P_3 < P_4$ のため何も行いません。
- $\vdots$
よって、 $1$ 番目の質問について $P_i = 2, ~ P_j = 4$ を満たす $i, j$ が $i < j$ となる最初の時刻は $3$ です。
$2$ 番目の質問について、時刻 $0$ の時点ですでに $P_i = 3, P_j = 4$ を満たす $i, j$ は $i < j$ を満たしているため、 $0$ と答えてください。
このテストケースは部分点の条件を満たしています。
5 10
5 4 3 2 1
1 3
1 4
1 5
2 3
1 2
1 3
4 5
3 4
2 5
2 3
10
7
4
9
13
10
1
5
3
9
このテストケースは、部分点の条件を満たしています。