n log n 的最長上公升子串行

2021-08-08 04:15:25 字數 599 閱讀 7896

#include #include #include #include #include #define siz 100005

using namespace std;

int n,k;

int gp[siz];

int ans[siz],len,max;

int ar[siz];

/* 二分查詢。 注意,這個二分查詢是求下界的; (什麼是下界?詳情見《演算法入門經典》 p145)

即返回 >= 所查詢物件的第乙個位置(想想為什麼)

也可以用stl的lowe_bound二分查詢求的下界

*/int binary_search1(int i)

return left;

}int binary_search2(int i){

int left,right,mid;

left=0,right=max;

while(left= ans[len])

ans[++len] = gp[i];

else{

int pos = binary_search1(i);

ans[pos] = gp[i];

//cout<

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