PKU POJ 3903 Stock Exchange 最长递增子序列

必须要nlogn算法才能过

View Code
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int L,a[100005];
int list[100005],numoflist;
int bsearch(int value)
{
    int l=0,r=numoflist-1,mid;
    while (l<r)
    {
        mid=(l+r)>>1;
        if (list[mid]>=value)
            r=mid;
        else
            l=mid+1;
    }
    return l;
}
int LIS()
{
    list[0]=a[0];
    numoflist=1;
    for (int i=1;i<L;++i)
    {
        if(a[i]>list[numoflist-1])
            list[numoflist++]=a[i];
        else
        {
            int pos=bsearch(a[i]);
            list[pos]=a[i];
        }
    }
    return numoflist;
}
int main()
{
    while(scanf("%d",&L)!=EOF)
    {
        for (int i=0;i<L;++i)
            scanf("%d",&a[i]);
        printf("%d\n",LIS());
    }
    return 0;
}

 

posted on 2013-03-28 18:55  Deller  阅读(144)  评论(0)    收藏  举报

导航