nlogn求解最長上公升子串行

2022-09-12 10:27:15 字數 709 閱讀 1780

先講解兩個函式 lower_bound()和upper_bound()

使用規範為

lower_bound(陣列名+k,陣列名+k+n,x,cmp)代表在陣列[k]到陣列[k+n]中查詢x  並可以使用過載重新定義cmp  

upper_bound(陣列名+k,陣列名+k+n,x,cmp)代表在陣列[k]到陣列[k+n]中查詢x  並可以使用過載重新定義cmp

兩者的區別在於lower_bound()返回的是非降序列的第乙個》=key的位址(指標

而upper_bound()返回的是非降序列的第乙個》key的位址(指標

int maxx=0;

for(int i=1;i<=n;i++)//遍歷整個陣列的數字

maxx=max(dp[i],maxx);//維護乙個最大值

}

int len=1

;num[

1]=dp[1

];for(int i=2;i<=n;i++)//遍歷整個陣列 尋找上公升的序列

else

}

這樣優化過後  時間複雜度縮減到 n*logn  既外層迴圈n 內層logn的時間複雜度

struct

cmp};

for(int i=2;i<=z;i++)

}

最長上公升子串行 nlogn

最長上公升子串行中對於數ipt i 向前遍歷,當數ipt j 小於ipt i 則ipt j 可作為上公升序列中ipt i 的前乙個數字 dp i max 若現在有兩個狀態a,b 滿足dp a dp b 且 ipt a ipt b 則對於後面的狀態dp a 更優 因為若ipt i dp b 則必然ip...

最長上公升子串行nlog n

nlog n 的方法從很久之前就看了,愣是沒看懂,因為這個條件 現在,我們仔細考慮計算f t 時的情況。假設有兩個元素a x 和a y 滿足 f儲存lis長度 1 x y t 2 a x a y a t 3 f x f y 沒看懂,當a x 其實這只是傳遞乙個思想而已,當兩者的lis都一樣時取最小值...

最長上公升子串行 nlogn

fi 表示i長度的上公升子串行的最小末尾元素值 用貪心的辦法,每次訪問乙個小於當前末尾值的元素,就往前二分地找乙個可以替換的位置 include include include include using namespace std define debug x cerr x x endl cons...