olpheの競プロ帖

競プロ問やアルゴリズム等の考察します

Weird LIS(AtCoder Grand Contest 055)

問題概要

ある $1$ から $N$ までの順列 $P$ があって、$P$ の $i$ 要素目を取り除いたときのLISの長さを $A_i$ とする。$2\leq A_{i}\leq M $ を満たすような $A$ は何通りあるか。

事実

$P$ のLISが $K$ だとすると、$A_i$ は $K$ か $K - 1$ である。また $K$ であるとき、 $i$ 番目の要素を使わないような長さ $K$ のLISが存在する。 $P$ の要素は3種類に分類できる。

・取り除くとLISの長さが短くなる要素

・取り除いてもLISの長さは変わらないが、LISに含まれることもある要素

・LISに含まれることはない要素

解法

$A$ の全ての要素が等しい場合とそうでない場合に分けて考える

全ての要素が等しい場合

以下のようにして $A_i = K \space (2\leq K\leq N/2)$ を満たす $A$ を作ることができる。

$2,1,4,3,...,2K,2K-1$

以下のようにして $A_i = N - 1$ を満たす $A$ を作ることができる。

$1,2,...,N-1,N$

全ての要素が等しい場合以外

$2\leq A_{i}$ の条件より、$2 < A_i$ を満たす要素がある。これは $P$ のLISの長さが $3$ 以上であることを意味する。 また、$A$ に異なる要素があるため、$P$ の中に取り除くとLISの長さが短くなる要素を $1$ 個以上、それ以外の要素を $1$ 個以上含む必要がある。

LISの長さが短くなる要素 $X$ 個とそうでない要素を割り振ったとき、LISの長さは $X$ 以上である。LISの長さを $X$ にしたければそうでない要素を全てLISに含まれることはない要素にすれば良いし、$X+n$ にしたければ、そうでない要素のうち左から貪欲に連続した二つをLISに含まれることもある要素にすれば重複なく数えられる。

これを数えることを考える。

以下のような遷移を行いつつ通り数を数えると良い。

①取り除くとLISの長さが短くなる要素を一つ追加する。

②取り除いてもLISの長さは変わらないが、LISに含まれることもある要素を二つ追加する。今後②と③を使用できなくするかわりに④を使用できるようにしても良い。

③LISに含まれることはない要素を一つと取り除くとLISの長さが短くなる要素をこの順番で一つずつ追加する。

④LISに含まれることはない要素を一つ追加する。

その際、以下のような情報を持っておく

・追加した要素の数

・LISの長さ

・①か③を行ったかどうか

・①以外を行ったかどうか

・④を行うことができるかどうか

提出

Submission #28318663 - AtCoder Grand Contest 055