Problem C: 最长递增子序列
时间限制:1 Seconds 内存限制:128 Mbyte
总提交:377 正确:189 作者:外部导入
[提交] [统计] [提问]
题目描述
求一个数列中,递增的最长的子序列(不要求连续)的长度。
输入描述
第一行输入一个整数n(n<1000)。
第二行输入n个整数(每个整数小于1000)组成的一个数列,相互之间用空格隔开。
输出描述
输出所求的结果。
输入样例
10
4 2 9 4 9 6 7 2 9 6
输出样例
5
提示
提示:最长递增子序列为2 4 6 7 9
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=1002;
int a[MAXN];
int d[MAXN];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
d[1]=a[1];
int len=1;
for(int i=2;i<=n;i++)
{
if(a[i]>d[len])
d[++len]=a[i];
else
{
int j=lower_bound(d+1,d+len+1,a[i])-d;
d[j]=a[i];
}
}
printf("%d
",len);
return 0;
}