atcoder#ABC230D. [ABC230D] Destroyer Takahashi

[ABC230D] Destroyer Takahashi

题目描述

N N 109 10^9 列の格子状の区画に区切られた街に N N 枚の壁があり、1 1 から N N までの番号が割り振られています。
i i は上から i i 行目、左から Li L_i 列目から Ri R_i 列目の範囲にあります。(入出力例 1 1 の図も参考にしてください。)

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

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

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

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

输入格式

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

N N D D L1 L_1 R1 R_1 L2 L_2 R2 R_2 \vdots LN L_N RN R_N

输出格式

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

题目大意

在一个 NN10910^9 列的网格中有 NN 面墙,编号为 11NN。其中,编号为 ii 的墙的左端点位于 (i,Li)(i,L_i) ——即第 ii 行第 LiL_i 列,右端点位于 (i,Ri)(i,R_i)

你的拳头一次可以打破 连续DD 列里面的所有墙,也就是说,如果你用拳头击中了第 xx 列,那么所有 一部分在第 xx 到第 x+D1x+D-1 列里的墙 会被破坏。如果一座墙的一小部分被破坏了,整座墙就会倒塌。问题是,最少你需要打几拳才能让 NN 座墙全都倒塌?

Translated by @xiaomuyun

3 3
1 2
4 7
5 9
2
3 3
1 2
4 7
4 9
1
5 2
1 100
1 1000000000
101 1000
9982 44353
1000000000 1000000000
3

提示

制約

  • 1  N  2 × 105 1\ \leq\ N\ \leq\ 2\ \times\ 10^5
  • 1  D  109 1\ \leq\ D\ \leq\ 10^9
  • 1  Li  Ri  109 1\ \leq\ L_i\ \leq\ R_i\ \leq\ 10^9
  • 入力はすべて整数である。

Sample Explanation 1

入力例 1 1 に対応する壁の配置を図示したものが下図です。 ![image](https://img.atcoder.jp/ghi/b7b9e6741514f51c6c0aac924589c9d2.png) たとえば次のようにパンチを放つことで、 2 2 回のパンチですべての壁を破壊することができます。(以下の説明では、a a 列目から b b 列目までの範囲を [ a, b ] \lbrack\ a,\ b\ \rbrack と表記します。) - まず、 [ 2, 4 ] \lbrack\ 2,\ 4\ \rbrack にパンチを放つ。 [ 2, 4 ] \lbrack\ 2,\ 4\ \rbrack に存在する壁である壁 1 1 と壁 2 2 はダメージを受け、破壊される。 - 次に [ 5, 7] \lbrack\ 5,\ 7\rbrack にパンチを放つ。[ 5, 7] \lbrack\ 5,\ 7\rbrack に存在する壁 3 3 はダメージを受け、破壊される。 また、次の方法でもすべての壁を 2 2 回のパンチで破壊することができます。 - まず、[ 7, 9 ] \lbrack\ 7,\ 9\ \rbrack にパンチを放ち、壁 2 2 と壁 3 3 を破壊する。 - 次に、[ 1, 3 ] \lbrack\ 1,\ 3\ \rbrack にパンチを放ち、壁 1 1 を破壊する。

Sample Explanation 2

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