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




  • 相关阅读:
    iOS-UIScrollView的使用
    iOS-UILabel的使用
    iOS-UITextField的使用
    iOS-UIScreen,UIFont,UIColor,UIView,UIButton
    jQuery和ajax【“Asynchronous Javascript And XML】
    iOS-NSBundle、NSArray、NSDictionay
    iOS-UINavigationController多控制器管理
    iOS-NSNotification本地推送、远程推送
    iOS-MJRefresh框架
    苹果电脑:快捷键使用
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/3703279.html
Copyright © 2020-2023  润新知