ZOJ 1986 Bridging Signals 最长子序列
ZOJ 1986 Bridging Signals 最长子序列
经过看抄别人的算法过了,原来这种题有两种,一种是O(n^2)的,一种是(n*logN)的
#include <stdio.h>
#include <alloc.h>
int main()
{
int N,n,i,j,t,Len;
int *L ,*B;
scanf("%d",&N);
while(N--)
{
scanf("%d",&n);
L = (int *)malloc(sizeof(int)*n);
B = (int *)malloc(sizeof(int)*n);
i = 0;
t = n;
while(t--)
{
scanf("%d",&L[i]);
i++;
}
B[0]=-10000;
B[1]=L[0];
Len = 1;
int p,r,m;
for(i=1;i<n;i++)
{
p=0;r=Len;
while(p<=r)
{
m = (p+r)/2;
if(B[m]<L[i]) p = m+1;
else r = m-1;
}
B[p] = L[i];
if(p>Len) Len++;
}
free(L);
free(B);
printf("%d\n",Len);
}
return 0;
}