最长上升子序列 o(n*logn)算法

来源:互联网 发布:mac pro 无法关闭蓝牙 编辑:程序博客网 时间:2024/06/06 01:13
#include<iostream>
#include<algorithm>
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stack>
#include<queue>
const int MOD = 1e9+7;
const int MAXN = 40050;
typedef long long LL;
using namespace std;
int num[MAXN];
int main()
{
    int T, n, tmp, m;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        num[0]=0;
        int len=1;
        for(int i=0; i<n; i++)
        {
            scanf("%d",&tmp);
            if(tmp>num[len-1])
            num[len++]=tmp;
            else
            {
                m=upper_bound(num,num+len,tmp)-num;
                num[m]=tmp;
            }
        }
        printf("%d\n",len-1);
    }
    return 0;
}
原创粉丝点击