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




  • 相关阅读:
    ASP.net AJAX Toolkit —— DynamicPopulateExtender
    查找存储过程修改时间
    Application_Start和Application_End事件执行时间
    制作导航菜单
    multiple backgrounds
    background-size
    background-clip
    background-origin
    文本阴影text-shadow
    嵌入字体@font-face
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/3703279.html
Copyright © 2011-2022 走看看