Last updated:2018-04-15 19:56:28
Category:DP, Tag: LIS


概要


列$a$の最長増加部分列(Longest Increasing Subsequnce; LIS)を求める.
$a$の長さ$k$の増加部分列は,$i_1 < i_2 < \cdots < i_k$で$a_{i_1} < a_{i_2} < \cdots < a_{i_k}$なる部分列$\{a_{i_1}, a_{i_2}, \cdots, a_{i_k}\}$をいう.

計算量


$O(N\log N)$

使い方


std::vector<int>型の列を渡すとそのLISの長さを返す.

std::vector<int> a;

// aを初期化

// aのLISの長さを取得
int k = LIS(a);

実装例


問題例