最長上公升子串行O NlogN 演算法

2021-07-04 08:36:30 字數 596 閱讀 4940

給出乙個長度為n的序列,請求出其最長上公升子串行的長度。

首先很容易想到o(

n2) 的演算法 f[

i]表示1~i最長上公升子串行長度則 f[

i]=m

ax+1

,(1≤

j∧(a[

j]i])

顯然我們需要的只是滿足(1

≤j∧(a[

j]i]

) 這一條件的最大f[j],那麼我們為何不將他記錄下來呢

用g[i]表示f[j]=i 時的 a[

j]mi

n len表示當前最大上公升自序列長度

易證:

#include

#include

using

namespace

std;

int n,a[100050];

int c[100050];

int len=0;

int find (int x)

return l;

}int main()

printf("%d",len);

return

0;}

膜拜所有膜拜我的人

最長上公升子串行 O nlogn

題目描述 input 輸入乙個整數n 表示接下來有 n 個數輸入。output 輸出當前數列最長上公升子串行的長度。直接上 最長下降子串行 最長山峰序列都可以以該問題為母問題 進行延伸。include include using namespace std define max 1000 int s...

最長上公升子串行O nlogn

假設已經計算出的兩個狀態a和b滿足a a a b 且d a d b 則對於後續所有的狀態i 即i a且i b 來說,a並不會比b差 如果b滿足a b a i 的條件,a肯定也滿足,且二者的d值相同 但反過來卻不一定了,a滿足a a a i 的條件時,b卻不一定滿足。換句話說,如果我們只保留a,一定不...

最長上公升子串行O nlogn

令a i 表示輸入第i個元素,d i 表示從a 1 到a i 中以a i 結尾的最長子序列長度。對於任意的0 j i 1,如果a j a i 則a i 可以接在a j 後面形成乙個以a i 結尾的新的最長上公升子串行。對於所有的 0 j i 1,我們需要找出其中的最大值。dp狀態轉移方程 d i m...