atcoder#ABC230D. [ABC230D] Destroyer Takahashi

[ABC230D] Destroyer Takahashi

配点 : 400400

問題文

NN10910^9 列の格子状の区画に区切られた街に NN 枚の壁があり、11 から NN までの番号が割り振られています。 壁 ii は上から ii 行目、左から LiL_i 列目から RiR_i 列目の範囲にあります。(入出力例 11 の図も参考にしてください。)

高橋君は NN 枚の壁をすべて破壊することにしました。 超人的な腕力を持つ高橋君は、11 回のパンチで連続する DD 列にまとめてダメージを与えることができます。

  • より厳密に言い換えると、11 以上 109D+110^9 - D + 1 以下の 整数 xx を選んで、xx 列目から x+D1x + D - 1 列目に (一部でも) 存在するすべての破壊されていない壁にパンチによるダメージを与えることができます。

壁は一部分でもダメージを受けると、パンチの衝撃波により全体が木っ端みじんに破壊されてしまいます。 (入出力例 11 の説明も参考にしてください。)

高橋君がすべての壁を破壊するには、少なくとも何回のパンチを放つ必要がありますか?

制約

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1D1091 \leq D \leq 10^9
  • 1LiRi1091 \leq L_i \leq R_i \leq 10^9
  • 入力はすべて整数である。

入力

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

NN DD

L1L_1 R1R_1

L2L_2 R2R_2

\vdots

LNL_N RNR_N

出力

すべての壁を破壊するのに必要なパンチの最少回数を出力せよ。

3 3
1 2
4 7
5 9
2

入力例 11 に対応する壁の配置を図示したものが下図です。

image

たとえば次のようにパンチを放つことで、 22 回のパンチですべての壁を破壊することができます。(以下の説明では、aa 列目から bb 列目までの範囲を [a,b]\lbrack a, b \rbrack と表記します。)

  • まず、 [2,4]\lbrack 2, 4 \rbrack にパンチを放つ。 [2,4]\lbrack 2, 4 \rbrack に存在する壁である壁 11 と壁 22 はダメージを受け、破壊される。
  • 次に [5,7]\lbrack 5, 7\rbrack にパンチを放つ。[5,7]\lbrack 5, 7\rbrack に存在する壁 33 はダメージを受け、破壊される。

また、次の方法でもすべての壁を 22 回のパンチで破壊することができます。

  • まず、[7,9]\lbrack 7, 9 \rbrack にパンチを放ち、壁 22 と壁 33 を破壊する。
  • 次に、[1,3]\lbrack 1, 3 \rbrack にパンチを放ち、壁 11 を破壊する。
3 3
1 2
4 7
4 9
1

入出力例 11 と比べると、壁 33 の範囲が [5,9]\lbrack 5, 9 \rbrack から [4,9]\lbrack 4, 9 \rbrack に変わりました。 この場合は [2,4]\lbrack 2, 4 \rbrack にパンチを放つことで 11 回ですべての壁を破壊できます。

5 2
1 100
1 1000000000
101 1000
9982 44353
1000000000 1000000000
3