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




  • 相关阅读:
    PB中的函数ProfileString
    PB做大屏显示滚动窗口 [转载]
    PB对象(sqlca、sqlsa、sqlda)[转载]
    SQL中 EXCEPT、INTERSECT用法[转载]
    第一篇博客
    Intelli IDEA 炫酷插件
    概念总结
    秒杀系统(四)——异常处理和常量的处理
    秒杀系统(三)——实现哪些秒杀系统功能
    秒杀系统(二)
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/3703279.html
Copyright © 2011-2022 走看看