nyoj 214 单调递增子序列(二)


单调递增子序列(二)

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述

给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长子序列,并求出其长度。

如:1 9 10 5 11 2 13的最长单调递增子序列是1 9 10 11 13,长度为5。

输入
有多组测试数据(<=7)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的下一行里有n个整数,表示数列中的所有元素.每个整形数中间用空格间隔开(0<n<=100000)。
数据以EOF结束 。
输入数据保证合法(全为int型整数)!
输出
对于每组测试数据输出整形数列的最长递增子序列的长度,每个输出占一行。
样例输入
7
1 9 10 5 11 2 13
2
2 -1
样例输出
5
1


#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int a[100002],b[100002];
int erfen(int num,int len)//二分函数
{
    int left,right,mid;
    left=1;
    right=len;
    mid=(left+right)/2;
    while(left<=right)
    {
        if(b[mid]<num)
            left=mid+1;
        else if(b[mid]>num)
            right=mid-1;
        else
            return mid;
        mid=(left+right)/2;
    }
    return left;
}
int main()
{
    int n,len,i,j;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0; i<n; i++)
            scanf("%d",&a[i]);
        memset(b,0,sizeof(b));
        len=1;
        b[1]=a[0];
        a[0]=-1000000;
        for(i=1; i<n; i++)
        {
            j=erfen(a[i],len);
            b[j]=a[i];
            if(j>len)
                len=j;
        }
        printf("%d\n",len);
    }
    return 0;
}



//#include<stdio.h>
//#include<string.h>
//#include<algorithm>
//using namespace std;
//#define MAX 100010
//#define IN -32767
//int num[MAX];
//int main()
//{
//    int n;
//    while(scanf("%d",&n)!=EOF)
//    {
//        memset(num,0,sizeof(num));
//        int l,r,mid,top=0,m;
//        num[0]=IN;
//        for(int i=0; i<n; i++)
//        {
//            scanf("%d",&m);
//            if(m>num[top])
//                num[++top]=m;
//            else
//            {
//                l=1,r=top;
//                while(l<=r)
//                {
//                    mid=(l+r)/2;
//                    if(m>num[mid])
//                        l=mid+1;
//                    else
//                        r=mid-1;
//                }
//                num[l]=m;
//            }
//        }
//        printf("%d\n",top);
//    }
//    return 0;
//}

posted @ 2016-11-22 21:33  xushukui  阅读(107)  评论(0编辑  收藏  举报