1081 最長上公升子串行 (dp 二分)

2021-10-03 10:22:29 字數 622 閱讀 6758

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,然後還用到了貪心,怎麼貪,就是保證原序列長度不變的情況下,讓裡面的元素盡可能小 當然滿足遞增 下面來驗證為什麼...