最大递增子序列——[Usaco2006 Oct]Hungry Cows饥饿的奶牛

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());
}
}

  

你可能感兴趣的:(USACO)