最长递增子序列

O(N^2)的代码很容易写。

但O(N logN)的代码就要想好办天了。关键是其实一些数学的东西,没有提示,难想明白。

 

 

#include <cstdio> const int inf= 1000; int main() { const int N = 12; const int A[N] = { 2, 3, 1, 9, 0, 2, 3, 5, 4, 8, 2,3 }; int MLA[N+1]; for (int i=0;i<N+1;++i) MLA[i] = -inf; int LSize=1; for (int i=0;i<N;++i) { int L=1, H = LSize; while(L<H) { int M = (L+H)/2; if (MLA[M] <= A[i]) L=M+1; else H=M; } if (MLA[L] == -inf){ MLA[L]=A[i]; ++LSize; } else if (A[i]<MLA[L]) MLA[L]=A[i]; } printf("%d/n", LSize-1); return 0; }

你可能感兴趣的:(最长递增子序列)