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_k を T_k と S の l 文字目から 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_1 を T_1 と
keioを連結したもので置き換えます。置き換え後の T_1 はkeioになります。 - 2 番目のクエリ : T_2 を T_2 と
proconを連結したもので置き換えます。、置き換え後の T_2 はproconになります。 - 3 番目のクエリ : T_1 と T_2 を比較します。T_1 =
keio, T_2 =proconであり、辞書順で比較すると T_1 の方が小さいため<を出力します。 - 4 番目のクエリ : T_3 を T_3 と
keioproconを連結したもので置き換えます。置き換え後の T_3 はkeioproconになります。 - 5 番目のクエリ : T_1 を T_1 と
proconを連結したもので置き換えます。置き換え後の T_1 はkeioproconになります。 - 6 番目のクエリ : T_1 と T_3 を比較します。T_1 =
keioprocon, T_3 =keioproconであり、辞書順で等しいため=を出力します。 - 7 番目のクエリ : T_1 と T_4 を比較します。T_1 =
keioprocon, T_4 は空文字列 であり、辞書順で比較すると T_4 の方が小さいため>を出力します。