数直線上に N 個の区間があります。i 番目の区間は s_i 以上 e_i 未満(半開区間 [s_i, e_i))の範囲を表します。ある 1 点が最大でいくつの区間に同時に含まれるか、その最大数を求めてください。
例えば区間が [1, 5), [2, 6), [4, 8) のとき、点 4 はこの 3 つすべてに含まれるので、答えは 3 です。
入力は以下の形式で標準入力から与えられます。1 行目に区間の個数 N、続く N 行に各区間の s_i と e_i が与えられます。
N s_1 e_1 s_2 e_2 ... s_N e_N
1 点に同時に重なる区間の最大数を半角数字で出力してください。
| 入力 | 出力 |
|---|---|
3 1 5 2 6 4 8 | 3 |
3 1 2 2 3 3 4 | 1 |
「同時に何個重なるか」は、区間どうしを総当たりで比べると大変ですが、イベントに分解して並べると一気に簡単になります(「いもす法」や「区間スケジューリング」に通じる考え方です)。
半開区間 [s, e) では「同じ座標で終わる区間と始まる区間は重ならない」ので、終了を先に処理するのがコツです。並べ替え(ソート)と組み合わせる典型問題なので、考え方ごと身につけましょう。一度マスターすると応用範囲がとても広いテクニックです。
下のエディタにコードを書き、「コンパイル・実行」で試し、「提出」で全テスト採点します。言語は C / C++ / Java から選べます。全テスト合格でこの問題はクリア(👑)です。
本番の編集・コンパイル・実行・採点は Exercode 上で行います。このページは予習・練習用です(実行は Wandbox の実コンパイラを利用)。