最长递增子序列nlogn解法:
int a[maxn+5];
int find(int s, int t, int v)//binary_search
{
int mid;
while(s<=t)
{
mid = (s+t)>>1;
if (v>a[mid])
s = mid + 1;
else
t = mid - 1;
}
return s;
}
int main()
{
int n;
int i, len;
while(scanf("%d", &n)!=EOF)
{
for (i=0; i<n; i++) scanf("%d", &a[i]);
len = 1;
for (i=1; i<n; i++)
{
if (a[i]>a[len-1])
{
a[len] = a[i];
len++;
}
else
{
a[find(0, len-1, a[i])] = a[i];
}
}
printf("%d\n", len);
}
return 0;
}