传说中的最长非降子序列
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define INF 100000000
int co[40040],c[40010],len;
int find(int L,int R,int x)
{
int mid;
if(L==R) return L;
mid=(L+R)>>1;
if(c[mid]<x) return find(mid+1,len,x);
else return find(L,mid,x);
}
int main()
{
int i,j,k;
int t,n;
scanf("%d",&t);
for(k=1;k<=t;k++)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&co[i]);
}
len=0;c[0]=-INF;
for(i=0;i<n;i++)
{
if(co[i]>c[len]) j=++len;
else j=find(1,len,co[i]);
c[j]=co[i];
}
printf("%d\n",len);
}
return 0;
}
968

被折叠的 条评论
为什么被折叠?



