最長上公升子串行 O nlogn

2021-07-01 21:25:46 字數 762 閱讀 8694

題目描述

input    :  輸入乙個整數n 表示接下來有 n 個數輸入。

output:  輸出當前數列最長上公升子串行的長度。

直接上** 最長下降子串行

最長山峰序列都可以以該問題為母問題 進行延伸。

#include #include using namespace std;

#define max 1000

int seq[max+10];//用於存數

int seqlen[max+10];//用於存以第i個數為終點的最長上公升子串行的長度

int main()

,1<=j=f[y],則x相對於y更有潛力。

首先根據f值分類,記錄滿足f[t]=k的最小的值a[t],記d[k]=min,f[t]=k.

1.發現d[k]在計算過程中單調不上公升

2.d[1]#include #include using namespace std;

const int n = 50000;

int a[n]; //a[i] 原始資料

int d[n]; //d[i] 長度為i的遞增子串行的最小值

int binsearch(int key, int* d, int low, int high)

return 0;

}int lis(int* a, int n, int* d)

return 0;

}

最長上公升子串行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...

最長上公升子串行O nlogn

最近在做單調佇列,發現了最長上公升子串行o nlogn 的求法也有利用單調佇列的思想。最長遞增子串行問題 在一列數中尋找一些數,這些數滿足 任意兩個數a i 和a j 若i 設dp i 表示以i為結尾的最長遞增子串行的長度,則狀態轉移方程為 dp i max,1 j 這樣簡單的複雜度為o n 2 其...