競プロキャンプ2026関西
コンテスト日時
2026/10/17 (Sa) 15:30 - 17:30

I - Bubble Sort Problems

Darjeeling
3
s
1024
MB
100
点

問題文

$(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$ 番目の質問についての答えを整数で出力せよ。

入力例 1
4 3 3 1 4 2 2 4 1 2 2 3
出力例 1
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$ と答えてください。

このテストケースは部分点の条件を満たしています。

入力例 2
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
出力例 2
10 7 4 9 13 10 1 5 3 9

このテストケースは、部分点の条件を満たしています。

提出
C++23 (g++ 12.2.0)