最长上升子序列 O(nlogn) 模板

最长上升子序列 O(nlogn)

#include<stdio.h>
int a[1005];
int arr[1005];
int len;
int Binary_search(int e)
{
    int l, r, mid;
    l = 0;
    r = len;
    while(l <= r)
    {
        mid = (l + r) >> 1;
        if(arr[mid] > e)    r = mid - 1;
        else                l = mid + 1;
    }
    return l;
}
int main()
{
    int n, pos;
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    arr[0] = a[0];
    len = 0;
    for(int i = 1; i < n; i++)
    {
        if(a[i] > arr[len])   arr[++len] = a[i];
        else
        {
            pos = Binary_search(a[i]);
            arr[pos] =a[i];
        }
    }
    printf("%d\n", len+1);
    return 0;
}

posted @ 2020-06-06 20:58  Bep  阅读(101)  评论(0)    收藏  举报