#include <iostream>
using namespace std;
int a[100010],b[100010];//b数组用来记录当前情况下各位最小值的递增子序列
int main()
{
int n;
cin>>n;
for(int i = 0; i < n; i++)
{
cin>>a[i];
}
int flag = 1;
b[0] = -2000000000;
b[flag] = a [0];
for(int i = 1; i < n; i++)
{
if(a[i] > b[flag])
b[++flag] = a[i];//如果a[i]比b的最后一个值大 向后加
else //否则查找插入位置(下一个数比a[i]大 这个数比a[i]小)
{
for(int j = 1;j <= flag; j++)
{
if(a[i] > b[j-1] && a[i] < b[j])
{
b[j] = a[i] ;
break;
}
}
}
/*for(int j = 0; j <= flag; j++)
cout<<b[j]<<' ';
cout<<endl;*/
}
cout<<flag<<endl;
}
51nod 1134 最长递增子序列
最新推荐文章于 2019-08-25 17:39:50 发布