您的位置:首页 > 其它

最长上升子序列nlogn通解(dp之线段树优化)

2014-10-07 18:38 295 查看
对于任何一个子序列,我们可以轻易的列出dp方程。dp[i]=max(dp[i],dp[j]+1);其中a[j]<a[i].但这是n^2的必然T。我们在仔细地看一下这个方程,我们只是要求高度小于等于a[i]里面的最大的dp值,如果高度是整数,也就是求1~a[i]的高度里面dp值最大,这里已经很明显,这个就是一个线段树的区间查询的过程。但是高度很大数组开不下怎么办?离散化一下,区间便变成了1~n。

每次求dp值的时候先查询,先求出a[i]在整个有序序列中的位置(二分),假如是p,那就查询1~p之间最大的dp值。然后求出dp[i],再把dp[i]插入p这个位置的线段树中。

推荐题:Codeforces Round #271 E Pillars

acdream 1216 Beautiful People



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: