dp最長遞增子串行的nlogn演算法實現

2021-07-08 20:10:36 字數 536 閱讀 9459

n2的演算法很簡單,這裡是利用另外乙個陣列d,d[i]存的是長度為i的最末尾元素。因為d[i]是有序的,可以用二分查詢優化,複雜度降低為nlogn,**如下,注意二分查詢的邊界:

#include #include #include using namespace std;

const int n = 41000;

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)

{ int i,j;

d[1] = a[1];

int len = 1; //遞增子串行長度

for(i = 2; i <= n; i++)

{ if(d[len]

最長遞增子串行 nlogn

include using namespace std 2 1 5 3 6 4 8 9 7 上課講了這個,回去之後就用 實現以下 這個演算法的目標是 找到乙個最長的遞增子串行 o nlogn 的複雜度 思路是遇到小的就留下,更新的路程中 插入到這個序列當中 一開始看那個麻瓜 blog 理解錯了 然後...

最長遞增子串行nlogn的做法

費了好大勁寫完的 用線段樹維護的 nlogn的做法 再看了一下 大神們寫的 nlogn 額差的好遠 我寫的又多又慢 大神們寫的又少又快 時間 空間 量 哪個都趕不上大佬們的 這是我寫的 include include include include include include using nam...

dp 最長遞增子串行 (LIS)

首先引出乙個例子 問題 給你乙個長度為 6 的陣列 陣列元素為 則其最長單調遞增子串行為 並且長度為 5 分析 題目所要找的遞增子串行 想想有什麼特點呢 是不是會發現 所有的遞增序列 前乙個數一定小於後乙個數 並且如果給所有從小到大的數標號 會得到一串遞增的數 既然是借助動態規劃分析問題 那麼當前的...