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;
}
相关文章
- 03-13HDU 4604 deque 最长上升子序列
- 03-13简单DP之最长上升子序列模型
- 03-13基于DP的LCS(最长公共子序列)问题
- 03-13最长上升子序列
- 03-13Alignment ( 最长上升(下降)子序列 )
- 03-13删除最少的元素(最长不上升子序列系列)
- 03-13最长公共子序列
- 03-13最长公共子序列
- 03-13动态规划---例题2.最长公共子序列问题
- 03-13最长不下降子序列 nlogn && 输出序列