#include<stdio.h>
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
int a[100005],b[100005];
int k=1;
scanf("%d",&a[0]);
b[k]=a[0];
for(i=1;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>b[k])
{
k++;
b[k]=a[i];
}
else
{
int tou=1,zh,wei=k;
while(tou<wei-1)
{
zh=(tou+wei)/2;
if(b[zh]>=a[i])
wei=zh;
else
tou=zh;
}
if(b[tou]>=a[i])
b[tou]=a[i];
else
b[wei]=a[i];
}
}
printf("%d\n",k);
}
}
原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=214;
#include<stdio.h>
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
int a[100005],b[100005];
int k=1;
scanf("%d",&a[0]);
b[k]=a[0];
for(i=1;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>b[k])
{
k++;
b[k]=a[i];
}
else
{
int tou=1,zh,wei=k;
while(tou<wei-1)
{
zh=(tou+wei)/2;
if(b[zh]>=a[i])
wei=zh;
else
tou=zh;
}
if(b[tou]>=a[i])
b[tou]=a[i];
else
b[wei]=a[i];
}
}
printf("%d\n",k);
}
}