zoukankan      html  css  js  c++  java
  • HDU1950

    //虽然是一道LIS问题,但是还是第一次用O(n*lgn)这种算法,赶角波错哈哈哈哈。。。。至少今天有所收获


    #include<cstdio>
    #include<cstring>
    #define max 40000+5
    int a[max],dp[max];

    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            int n,len=0;
            scanf("%d",&n);
            //memset(dp,0,sizeof(dp));
            dp[0]=0;
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
            }
            for(int i=1;i<=n;i++){
                if(a[i]>dp[len]){
                    dp[++len]=a[i];
                }
                else{                                          //如不使用二分查找,时间复杂度仍为O(n*n)
                    int minn=1,maxn=len+1;
                    while(minn<maxn){
                        int mid=minn+(maxn-minn)/2;
                        if(dp[mid]>a[i]){
                            maxn=mid;
                        }
                        else{
                            minn=mid+1;
                        }
                    }
                    if(dp[minn]<a[i]){
                        dp[maxn]=a[i];
                    }
                    else{
                        dp[minn]=a[i];
                    }
                }
            }
            printf("%d ",len);
        }
    }




  • 相关阅读:
    gitblit.cmd运行自动关闭
    用SourceTree轻松Git项目图解
    GUI for git|SourceTree|入门基础
    SourceTree的简单使用
    Windows平台使用Gitblit搭建Git服务器图文教程
    使用Gitblit 搭建Windows Git服务器
    Git使用详细教程
    Kafka 设计与原理详解
    Kafka 客户端实现逻辑分析
    js判断只能输入数字或小数点
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/3703279.html
Copyright © 2011-2022 走看看