N*N
View Code
Nlog(N)
觉得这个更接近于贪心的思想
二分查找,可以更新则不断把a[]中的子数更新小,否则增加a[]
View Code
#include<stdio.h>
int s[5009];
int a[5009];
int n;
int lis()
{
int l,r,mid,len=1;
a[1]=s[1];
for(int i=2;i<=n;i++)
{
l=1,r=len;
while(l<=r)
{
mid=(l+r)>>1;
if(a[mid]<s[i])l=mid+1;
else r=mid-1;
}
a[l]=s[i];
if(l>len)len++;
}
return len;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&s[i]);
}
printf("%d\n",lis());
}
}