• HDU 1950 Bridging signals (DP)


    职务地址:HDU 1950

    这题是求最长上升序列,可是普通的最长上升序列求法时间复杂度是O(n*n)。显然会超时。于是便学了一种O(n*logn)的方法。也非常好理解。

    感觉还用到了一点贪心的思想。

    详细的见这篇博客吧,写的非常通俗易懂。传送门

    代码例如以下:

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <stdlib.h>
    #include <math.h>
    #include <ctype.h>
    #include <queue>
    #include <map>
    #include <set>
    #include <algorithm>
    
    using namespace std;
    #define LL long long
    int a[50000], b[50000], len;
    int bin_seach(int x)
    {
        int low=1, high=len, mid, ans;
        while(low<=high)
        {
            mid=low+high>>1;
            if(b[mid]>=x) {high=mid-1;ans=mid;}
            else low=mid+1;
        }
        return ans;
    }
    int main()
    {
        int t, n, i, pos;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
            }
            len=0;
            b[++len]=a[0];
            for(i=1;i<n;i++)
            {
                if(a[i]>b[len])
                {
                    b[++len]=a[i];
                }
                else
                {
                    pos=bin_seach(a[i]);
                    b[pos]=a[i];
                }
            }
            printf("%d
    ",len);
        }
        return 0;
    }
    


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Saltstack
    搭建中小规模集群之rsync数据同步备份
    Python开发【第七篇】:面向对象二
    批量管理
    inotify
    Python开发【第六篇】:面向对象
    网络文件系统NFS
    Linux基础介绍【第九篇】
    Linux基础介绍【第八篇】
    Linux基础介绍【第七篇】
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4840083.html
Copyright © 2020-2023  润新知