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);
        }
    }




  • 相关阅读:
    mac 使用brew 安装php-redis
    thinkphp6 使用redis 实现消息队列
    Redis 桌面管理器:Another Redis Desktop Manager
    linux 查看并关闭shell脚本执行
    MySQL教程之concat以及group_concat的用法
    PHP redis 使用
    thinkphp6 command(自定义指令)
    git 使用
    linux shell中 "2>&1"含义
    linux crontab 定时任务
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/3703279.html
Copyright © 2011-2022 走看看