标签:
用普通的O(n^2)方法会超时,于是在网上习得O(nlogn)的算法。
1 #include<algorithm>
2 #include<cstdio>
3 #include<vector>
4 using namespace std;
5
6 int a[40000];
7 vector<int> dp;
8 int main()
9 {
10 int t;
11 scanf("%d",&t);
12 while(t--)
13 {
14 int n;
15 scanf("%d",&n);
16 for(int i=0; i<n; i++)
17 scanf("%d",&a[i]);
18 dp.clear();
19 dp.push_back(a[0]);
20 for(int i=1; i<n; i++)
21 {
22 int k=lower_bound(dp.begin(),dp.end(),a[i])-dp.begin();
23 if(k==dp.size())
24 dp.push_back(a[i]);
25 else
26 dp[k]=a[i];
27 }
28 printf("%d\n",dp.size());
29 }
30 }
31
标签:
原文地址:http://www.cnblogs.com/CodeMIRACLE/p/5571947.html