const LL N = ;
LL num[N];
LL dp[N];
LL go(LL l, LL r, LL k)
{
for (; r >= l; r--)
if (dp[r] <= k)
return r;
return l;
}
LL bins(LL l, LL r, LL k)
{
while (r - l >= )
{
if (r - l <= )
return go(l, r, k);
LL mid = (l + r) >> ;
if (dp[mid] > k)
r = mid;
else
l = mid;
}
}
LL solve(LL n)
{
fill(dp, dp + N, N + );
dp[] = ;
LL ans = ;
for (int i = ; i < n; i++)
{
LL e = num[i];
LL ads = bins(, i, e);
dp[ads + ] = min(dp[ads + ], e);
ans = max(ans, ads+);
}
//cout << ans << endl;
return ans;
}
相关文章
- SGU 199 - Beautiful People 最长上升子序列LIS
- POJ2533 Longest Ordered Subsequence —— DP 最长上升子序列(LIS)
- 最长公共子序列 LCS
- 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(37)诛仙四剑破子串 - 最长公共子序列(LCS)
- POJ 1159 Palindrome-最长公共子序列问题+滚动数组(dp数组的重复利用)(结合奇偶性)
- hdu1243(最长公共子序列变形)
- 51Nod 1092 回文字符串 | 最长公共子序列变形
- BUY LOW, BUY LOWER_最长下降子序列
- 05_最长公共子序列问题(LCS)
- (最长不降子序列)最少拦截系统 -- hdu -- 1257