题目链接
传统DP时间复杂度是
O
(
n
2
)
O(n^2)
O(n2)有四个测试点会超时
使用二分优化到
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)
博客参考
AC代码
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn =5e4+5;
const int INF = 0x3f3f3f3f;
int low[maxn];
int arr[maxn];
int main(){
int n;
cin>>n;
fill(low, low + n, INF);
for(int i = 0; i < n; i++){
cin>>arr[i];
*lower_bound(low, low + n, arr[i]) = arr[i];
}
cout<<lower_bound(low, low+n, INF) - low <<endl;
return 0;
}