pipi又來考大家最長上公升子串行問題了~
不過這次它想為難一下你~
給你乙個整數序列,包含n個整數,要你求最長上公升子串行的長度~
多組輸入
第一行為乙個整數n,1<=n<=1000000
第二行包括n個整數,每個整數均在int範圍內
輸出乙個整數,表示最長上公升子串行的長度。
51 2 5 4 7
#include
using
namespace std;
int n;
const
int n=
1e6+
5,inf=
1e9;
int b[n]
,a[n]
;///b[i]表示最長上公升子串行為長度為i時的末尾最小值
intmain()
int len=1;
b[len]
=a[1];
///初試化b[1]的值
for(
int i=
2;i<=n;i++)}
printf
("%d\n"
,len);}
return0;
}
LIS 最長上公升子串行 dp 二分優化
建立乙個陣列res maxn res i 用來記錄以i位置為結尾的最長的子串行,那麼我們要求res這個陣列裡的最大值 注意不是res n 所以當我們在求res i 時,需要從0到i 1掃一遍,看看通過哪個點 鬆弛 因為這個演算法好像迪科斯徹最短路,所以借用這個名詞來解釋一下 這樣 如下 includ...
二分求最長上公升子串行
我們知道n2 求最長上公升子串行的方法,即 f i m ax f i f j 1 j 1i 1,f i f j 然而,我們可以用二分求最長上公升子串行。由於我們知道子串行c,c 1 c 2 c n 所以我們二分出乙個位置t,將c t 的值更新為a i 如果t ans,證明最長上公升子串行的長度可以 ...
二分求最長上公升子串行
二分求最長上公升子串行 求長度 之前在書上其實見到過,但是沒想去看,結果 回到正題,二分求最長上公升子串行的思路是,在原動態規劃寫法上進行優化,優化了查詢過程,使得查詢過程變成了lon2n,然後還用到了貪心,怎麼貪,就是保證原序列長度不變的情況下,讓裡面的元素盡可能小 當然滿足遞增 下面來驗證為什麼...