***一道裸题,
思路:在g数组内往里加元素,一直扩大这个数组,每次查询的时候,用二分查找,时间复杂度O(nlog(n))
***
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<cctype> #include<queue> #include<vector> #include<algorithm> using namespace std; typedef long long LL; #define N 101000 #define INF 0x3f3f3f int a[N], g[N], d[N]; int main() { int n, k, ans; while(~scanf("%d", &n)) { for(int i=0; i<n; i++) { scanf("%d", &a[i]); g[i]=INF; } ans=0; for(int i=0; i<n; i++) { k=lower_bound(g, g+n, a[i])-g; g[k]=a[i]; ans=max(ans, k); } printf("%d\n", ans+1); } return 0; }
原文:http://www.cnblogs.com/9968jie/p/5719109.html