fi 表示i長度的上公升子串行的最小末尾元素值
用貪心的辦法,每次訪問乙個小於當前末尾值的元素,就往前二分地找乙個可以替換的位置
#include
#include
#include
#include
using
namespace
std;
#define debug(x) cerr << #x << "=" << x << endl;
const
int maxn = 100000 + 10;
int f[maxn],n,a[maxn],vis[maxn];
int q,fa[maxn],last[maxn],depth[maxn],len;
int find(int x) else
}return ans;
}int main()
f[1] = a[1];
len = 1;
for(int i=2; i<=n; i++)
}cout
<< len;
return
0;}
最長上公升子串行 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演算法
這題目是經典的dp題目,也可叫作lis longest increasing subsequence 最長上公升子串行 或者 最長不下降子串行。很基礎的題目,有兩種演算法,複雜度分別為o n logn 和o n 2 a.o n 2 演算法分析如下 a 1 a n 存的都是輸入的數 1 對於a n 來...