最長上公升子串行的O n logn 的演算法

2021-09-25 01:07:30 字數 707 閱讀 5417

該演算法主要運用了貪心和二分的思想。

其中的sum陣列的作用:sum[i]表示長度為i的最長上公升子串行末尾元素的最小值。

#include

using namespace std;

const

int maxn=

1e5+10;

int s[maxn]

,sum[maxn]

;int n;

intmain()

int len=

0;sum[len]

=s[0];

for(

int i=

1;icout<1<}return0;

}

同理可知最長的不降子串行的o(n*logn)的演算法的**:

#include #include #include #include #include #include #include using namespace std;

const int maxn = 1e5+5;

const int inf = 0x3f3f3f3f;

typedef long long ll;

int s[maxn],sum[maxn];

int n;

int main()

}cout<}

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...