注册 登录
编程论坛 C++教室

最长上升子序列,不知道那些地方错了或者有漏洞,一直WA

发布于 2010-09-26 01:20, 334 次点击
程序代码:
#include<iostream>
using namespace std;

#define MAX 10001

int main()
{
    int n,a[MAX],x,len,i,k1,k2,mid;
    while(scanf("%d",&n)!=EOF&&n>0)
    {
        scanf("%d",&x);
        len=1; a[len]=x;
        for(i=1;i<n;i++)
        {
            scanf("%d",&x);
            if(x>=a[len])
            {
                len++;
                a[len]=x;
            }
            else
            {
                k1=0,k2=len;
                while(k2-k1>1)
                {
                    mid=(k1+k2)/2;
                    if(a[mid]>=x) k2=mid;
                    else k1=mid;
                }
                a[k2]=x;
            }
        }
        printf("%d\n",len);
    }
    return 0;
}
0 回复
1