給出乙個長度為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...