Chokudai SpeedRun 002 L問題:長方形 β

問題. 長方形 β

 N 個の長方形があり, i 番目の長方形の幅と高さはそれぞれ  A_i, B_i である. N 個の長方形の内いくつかを選び軸平行に順番に重ねていく.このとき,前に置かれている長方形の内部で辺に接しないように設置する必要がある.このとき,最大で何個の長方形を重ねることができるかを求めよ.

制約 1 \le N \le 2 \times 10^5,  1 \le A_i, B_i \le 10^9

解法.最長増加部分列

次の 解説 を参考にした.

各長方形を頂点として, i 番目と  j 番目の長方形に対して, i j を含むときに弧  (i, j) を加えた有向グラフ  G を考える. G は DAG となることが分かるので,DAG 上の最長パス問題に帰着したくなるが, G を陽に構成しようとすると辺集合を求める部分で  O(N^2) 時間かかるので時間内に求めることができない.そこで,長方形の包含関係を幾何的に解釈することによって  G を陽に求めずに答えを求めることができるかを考える.

 (i, j) \in E(G) であるための必要十分条件は, (A_i \ge A_j \wedge B_i \ge B_j) または  (A_i \ge B_j \wedge B_i \ge A_j) となることであるが,各長方形を  A_i \ge B_i とすることによって, A_i \ge A_j \wedge B_i \ge B_j とすることができる.
ここで,幅に関して昇順に整列をしたときの高さの列を  B' = (B'_1, B'_2, \ldots, B'_N) とする.すべての長方形の幅が異なるとすると,重ねることができる最大個数の長方形の置く順番と,  B' 上の最長増加部分列が一致することが分かるので,答えは  B' の最長増加部分列の長さとなる.
幅が等しい長方形がある場合を考えるが,そのようなどの2つの長方形  i, j に対しても, (i, j) \notin E(G) かつ  (j, i) \notin E(G) となる.なぜならば, A_i = A_j かつ  B_i \le B_j のとき, j を回転させても  A_i = A_j \ge B_j かつ  B_i \le B_j = A_j となるからである.したがって,幅に関して昇順に整列したとき,等しい値同士は高さに関して降順に整列することによってお互いを含むことができなくなる.

計算時間 O(N \log N)

幅が等しい長方形がなければ最長増加部分列に帰着できるなと思って,そこから進まなかった.解説見るともう少しで解法にたどり着けたはずなんだけどな 😢