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