比赛 20120619 评测结果 AAAAAAAAAA
题目名称 免费午餐 最终得分 100
用户昵称 feng 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-06-19 20:30:10
显示代码纯文本
#include <cstdio>
int main()
{
	freopen("lunch.in","r",stdin);
	freopen("lunch.out","w",stdout);
    int i,s=0,h,l,m,N,a[100000],c[100001]={0};
    scanf("%d",&N);
    for (i=0;i<N&&scanf("%d",&a[i]);i++)
        if (a[i]>0) break;
    if (i<N)
    {
        c[1]=a[i++];
        s=1;
    }
    for (;i<N;i++)
    {
        scanf("%d",&a[i]);
        if (a[i]==0) continue;
        if (a[i]<c[s]) c[++s]=a[i];
        else
        {
            h=s+1;
            l=0;
            while (h-l>1)
            {
                m=(h+l)>>1;
                if (c[m]>a[i]) l=m;
                else h=m;
            }
            c[l+1]=a[i];
        }
    }
    printf("%d",s);
    return 0;
}