ダイヤグラム(第2回WUPC [H])

スポンサーリンク

概要

問題文 →
公式解説 → なさそう?
自分の提出 →

解法

区間 [Li,Ri)M 個与えられて、それぞれ選ぶ・選ばないで 2M 通りの選択肢があります。すべての点が 2 枚以上の区間に被覆されるような選び方を数え上げる問題です。

区間を L 昇順でソートしておいて、その順に区間を置くかどうか決めていくことを考えます。

区間 [L,R) を置く時点では、[0,L) 部分が 2 枚以上の区間に覆われている必要があります。その条件のもと、区間 [L,R) を置いた直後の状態は、ある a,b に対して

  • [0,a) 部分は 2 枚以上に覆われている
  • [a,b) 部分はちょうど 1 枚に覆われている
  • [b,N) 部分はちょうど 0 枚に覆われている

が成り立ちます。実際、x<L の部分は 2 枚以上で覆われてということでした。これまで置いた区間はすべて左端が L 以下であるため、xL 部分の被覆枚数は x について単調減少です。

この状態 (a,b) に対する数え上げを dp[a,b] として、ひとつずつ区間を置く・置かない場合の遷移を計算していくことにより、本問題は (ソート O(MlogM) 時間を除き)O(MN2) 時間で解くことができます。

N の制約が大きいですが、はじめに座標圧縮しておくことで、N=O(M) の場合に帰着できます。したがって、座標圧縮後に上述の dp を計算することで、本問題は O(M3) 時間で解くことができます。

タイトルとURLをコピーしました