R - Many Strings 解説 /

実行時間制限: 2 sec / メモリ制限: 1024 MiB

配点 : 100

問題文

長さ N の文字列 S が与えられます。また、空文字列で初期化された 2\times10^5 個の文字列 T_1, T_2, \ldots , T_{200000} があります。
以下の形式で与えられる Q 個のクエリを、与えられた順番に処理してください。
クエリは次の 2 種類のいずれかです。

  • タイプ1: 1 k l r の形式で与えられる。T_kT_kSl 文字目から r 文字目までからなる部分文字列をその順に連結したもので置き換える。

  • タイプ2: 2 x y の形式で与えられる。 T_x の方が T_y よりも辞書順で大きい場合は > を、小さい場合は < を、等しいならば = を出力する。

制約

  • 1 \leq N \leq 2 \times 10^5
  • 1 \leq Q \leq 2 \times 10^5
  • S は英小文字からなる長さ N の文字列
  • 1 \leq k \leq 2 \times 10^5
  • 1 \leq l \leq r \leq N
  • 1 \leq x,y \leq 2 \times 10^5
  • x \neq y
  • N,Q,k,l,r,x,y は整数

入力

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

N\ Q
S
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q

各クエリは次の形式のいずれかで与えられる。

1\ k\ l\ r
2\ x\ y

出力

タイプ 2 のクエリの回数を q 回として q 行出力せよ。
j 行目には、タイプ 2 のクエリのうち j 個目のものに対する答えを出力せよ。


入力例 1

10 7
keioprocon
1 1 1 4
1 2 5 10
2 1 2
1 3 1 10
1 1 5 10
2 1 3
2 1 4

出力例 1

<
=
>
  • 1 番目のクエリ : T_1T_1keio を連結したもので置き換えます。置き換え後の T_1keio になります。
  • 2 番目のクエリ : T_2T_2procon を連結したもので置き換えます。、置き換え後の T_2procon になります。
  • 3 番目のクエリ : T_1T_2 を比較します。T_1 = keio , T_2 = procon であり、辞書順で比較すると T_1 の方が小さいため < を出力します。
  • 4 番目のクエリ : T_3T_3keioprocon を連結したもので置き換えます。置き換え後の T_3keioprocon になります。
  • 5 番目のクエリ : T_1T_1procon を連結したもので置き換えます。置き換え後の T_1keioprocon になります。
  • 6 番目のクエリ : T_1T_3 を比較します。T_1 = keioprocon , T_3 = keioprocon であり、辞書順で等しいため = を出力します。
  • 7 番目のクエリ : T_1T_4 を比較します。T_1 = keioprocon , T_4 は空文字列 であり、辞書順で比較すると T_4 の方が小さいため > を出力します。