diff --git a/dynamic-programming/lis.cpp b/dynamic-programming/lis.cpp index 8de03ea..511d60f 100644 --- a/dynamic-programming/lis.cpp +++ b/dynamic-programming/lis.cpp @@ -3,13 +3,17 @@ // dp(i) = max j& a) { + vector dp (a.size(), 0x3f3f3f3f); + int res = 0; -memset(dp, 63, sizeof dp); -for (int i = 0; i < n; ++i) { - // increasing: lower_bound - // non-decreasing: upper_bound - int j = lower_bound(dp, dp + lis, v[i]) - dp; - dp[j] = min(dp[j], v[i]); - lis = max(lis, j + 1); + for (int v : a) { + // increasing: lower_bound + // non-decreasing: upper_bound + int j = lower_bound(dp.begin(), dp.begin() + res, v) - dp.begin(); + dp[j] = min(dp[j], v); + res = max(res, j + 1); + } + + return res; } diff --git a/tests/dynamic-programming/lis.test.cpp b/tests/dynamic-programming/lis.test.cpp index b3366cc..9770c52 100644 --- a/tests/dynamic-programming/lis.test.cpp +++ b/tests/dynamic-programming/lis.test.cpp @@ -2,16 +2,17 @@ #include using namespace std; +// @include: dynamic-programming/lis.cpp + const int N = 2e5; int main() { - int dp[N], v[N], n, lis; + int n; cin >> n; + vector v(n); for (int i = 0; i < n; i++) cin >> v[i]; - // @include: dynamic-programming/lis.cpp - - cout << lis << endl; + cout << lis(v) << endl; }