大體演算法思想是設定乙個棧,資料結構裡嚴格意義上的棧是後進先出,但是這裡的棧中間有稍微不一樣的地方在於中間的元素也會被覆蓋掉,演算法過程是,第乙個元素入棧,以後沒讀取乙個元素t,如果t比棧頂元素的大,那麼就入棧。如果比它小,那麼就用二分搜尋的方法在棧裡面找到這樣乙個元素stack[i],使得stack[i]>t並且stack[i-1](如果有的話)#define maxn 10000
long long stack[maxn];
int n;
long long t;
int top;
int main()
if(stack[mid]low=mid+1;
else
high=mid-1;}}
}printf("%d\n",top);
}return 0;
}
最長上公升子串行nlogn演算法
這題目是經典的dp題目,也可叫作lis longest increasing subsequence 最長上公升子串行 或者 最長不下降子串行。很基礎的題目,有兩種演算法,複雜度分別為o n logn 和o n 2 a.o n 2 演算法分析如下 a 1 a n 存的都是輸入的數 1 對於a n 來...
最長上公升子串行nlogn演算法
定義d k 長度為k的上公升子串行的最末元素,若有多個長度為k的上公升子串行,則記錄最小的那個最末元素。注意d中元素是單調遞增的,下面要用到這個性質。首先len 1,d 1 a 1 然後對a i 若a i d len 那麼len d len a i 否則,我們要從d 1 到d len 1 中找到乙個...
最長上公升子串行nlogn演算法
這題目是經典的dp題目,也可叫作lis longest increasing subsequence 最長上公升子串行 或者 最長不下降子串行。很基礎的題目,有兩種演算法,複雜度分別為o n logn 和o n 2 a.o n 2 演算法分析如下 a 1 a n 存的都是輸入的數 1 對於a n 來...