#include"stdio.h"
#include"string.h"
int a[100000+10],b[100000+10];
int search(int c,int d)
{
int high=d,low=1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(c>b[mid])
low=mid+1;
else if(c<b[mid])
high=mid-1;
else
return mid;
}
return low;
}
int main()
{
int i,j,max,num;
while(scanf("%d",&num)!=EOF)
{
for(i=0;i<num;i++)
scanf("%d",&a[i]);
b[1]=a[0];
for(i=1,max=1;i<num;i++)
{
j=search(a[i],max);
b[j]=a[i];
if(j>max)
max=j;
}
/*
for(j=i+1,max=0;j<=num;j++)
if(a[j]>a[i]&&b[j]>max)
max=b[j];
b[i]=max+1;
if(b[i]>lmax)
lmax=b[i]; */
printf("%d\n",max);
}
return 0;
}
单调递增子序列(O(nlogn))
最新推荐文章于 2024-01-25 12:43:54 发布