POJ 1631 最长上升子序列的O(nlogn)算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1631 最长上升子序列的O(nlogn)算法相关的知识,希望对你有一定的参考价值。
用普通的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
以上是关于POJ 1631 最长上升子序列的O(nlogn)算法的主要内容,如果未能解决你的问题,请参考以下文章