• 最长上升子序列加强版


    . 最长上升子序列加强版

    描述

    给出N个数,它们各不相同,求最长上升子序列

    输入

    先给出一个数字N,代表有N组数据
    对于每组数据,先给出一个数字TOT,TOT小于等于40000.
    接下来有TOT个数字,为1到40000的某个排列.

    输出

    针对每组数据,输出最长上升序列的长度

    样例

    输入

    复制
    4
    6
    4
    2
    6
    3
    1
    5
    10
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1
    8
    8
    7
    6
    5
    4
    3
    2
    1
    9
    5
    8
    9
    2
    3
    1
    7
    4
    6

    输出

    复制
    3
    9
    1
    4
    #include<bits/stdc++.h>
    using namespace std;
    const int N=40000+20;
    int a[N],ans=1,c[N],h[N];
    int lowbit(int x) {
        return x&(-x);
    }
    void insert(int x,int vol) {
        while(x<=N) {
            c[x]=max(c[x],vol);
            x+=lowbit(x);
        }
    }
    int ask(int x) {
        int sum=0;
        while(x) {
            sum=max(sum,c[x]);
            x-=lowbit(x);
        }
        return sum;
    }
    int main() {
        int t;
        cin>>t;
        while(t--) {
            memset(c,0,sizeof(c));
            ans=0;
            int n;
            cin>>n;
            for(int i=1; i<=n; i++)
                cin>>a[i];
            for(int i=1; i<=n; i++) {
                 h[i]=ask(a[i])+1;
    //            for(int k=1;k<=N;k++)
    //            cout<<c[k]<<" ";
    //            cout<<endl;
    //            cout<<h[i]<<" daan"<<endl;
                insert(a[i]+1,h[i]);
                ans=max(ans,h[i]);
            }
    
            cout<<ans<<endl;
        }
    }
  • 相关阅读:
    nignx的master进程和worker进程的作用
    JVM运行机制
    ElasticSearch介绍与安装
    Maven打可执行包的pom.xml配置
    pg按日,周,月进行数据统计
    数据库中重复数据查询和删除
    聚类算法的评估应面向具体问题
    将博客搬至CSDN
    Mutual Information
    层次化聚类
  • 原文地址:https://www.cnblogs.com/cwjr/p/13381054.html
Copyright © 2020-2023  润新知