最长上升子序列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
每次求dp值的时候先查询,先求出a[i]在整个有序序列中的位置(二分),假如是p,那就查询1~p之间最大的dp值。然后求出dp[i],再把dp[i]插入p这个位置的线段树中。
推荐题:Codeforces Round #271 E Pillars
acdream 1216 Beautiful People
相关文章推荐
- code vs 2188 最长上升子序列(线段树优化DP)
- 最长公共上升子序列的DP解法及其优化
- 最长公共上升子序列的DP解法及其优化
- 最长公共上升子序列的DP解法及其优化
- D. Babaei and Birthday Cake---cf629D(最长上升子序列和+线段树优化)
- 小明系列问题——小明序列 (线段树优化的最长上升子序列)
- 初入算法篇(动态规划)最长上升子序列poj2533+栈优化模板&&scau18090 好多好多球
- NOJ 1135 Missile dp 最长上升子序列变形 双dp
- 【bzoj3173】【Tjoi2013】【最长上升子序列】treap+dp二分优化
- HDU 1025 Constructing Roads In JGShining's Kingdom (简单dp, 最长上升子序列LIS)
- 百练2757:最长上升子序列(简单dp)
- hdu 1160 dp (二维最长上升子序列 记录路径
- <序列DP>O(nlogn)的最长上升子序列
- POJ-2533 Longest Ordered Subsequence (线性dp 最长上升子序列)
- POJ3903 Stock Exchange 最长上升子序列DP]
- 【最长上升子序列+二分优化】麻烦的聚餐 egroup.pas/c/cpp
- POJ2533 Longest Ordered Subsequence【最长上升子序列+DP】
- Acdream 1126 Beautiful People(最长上升子序列,dp+线段树优化)
- hdu 1087 Super Jumping! Jumping! Jumping!-dp 最长上升子序列和
- 最长上升子序列、最长下降子序列的DP算法由O(n^2)到O(nlogn)算法实现及其优化