nlogn 的最長上公升子串行

2021-08-09 15:16:56 字數 494 閱讀 5452

#include

#include

#include

#include

using namespace std;

int dp[100000];

int a[100000];

int b[100000];

int main()

cout << lower_bound(dp, dp + i, 1000000) - dpfor (int j = 0;j < i;j++)

cout << lower_bound(dp, dp + i, 1000000) - dp;

system("pause");

return 0;

這裡最後要說明一下,使用lower_bound函式求出的序列是嚴格最長上公升序列,也就是說對於每一項i>j 都滿足a[i]>a[j],

而使用的是upper_bound的話就可以取等號,在飛彈攔截那道題中,第一問是可以取等號的,而第二問是不可以的,這裡一定要注意

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