• NYOJ 214 单调递增子序列(二) (单调递增子序列)


    单调递增子序列(二)

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:4
    描述

    给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长子序列,并求出其长度。

    如:1 9 10 5 11 2 13的最长单调递增子序列是1 9 10 11 13,长度为5。

    输入
    有多组测试数据(<=7)
    每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的下一行里有n个整数,表示数列中的所有元素.每个整形数中间用空格间隔开(0<n<=100000)。
    数据以EOF结束 。
    输入数据保证合法(全为int型整数)!
    输出
    对于每组测试数据输出整形数列的最长递增子序列的长度,每个输出占一行。
    样例输入
    7
    1 9 10 5 11 2 13
    2
    2 -1
    样例输出
    5
    1
     1 #include <iostream>
     2 #include <cstdio>
     3 const int MAX = 100000 + 10;
     4 using namespace std;
     5 int a[MAX], dp[MAX];
     6 
     7 int binary_search(int digit, int length)
     8 {
     9     int left=1,right = length,mid;
    10     mid=(right+left)/2;
    11     while(left<=right)
    12     {
    13         if(digit==dp[mid])
    14             return mid;
    15         if(digit>dp[mid])
    16             left=mid+1;
    17         else
    18             right=mid-1;
    19         mid=(right+left)/2;
    20     }
    21     return left;
    22 }
    23 int main()
    24 {
    25     int n,i,j,k;
    26     while(~scanf("%d", &n))
    27     {
    28         for(i=0;i<n;i++)
    29             scanf("%d", &a[i]);
    30         int len=1;
    31         dp[1]=a[0];
    32         for(i=1;i<n;i++)
    33         {
    34             j=binary_search(a[i],len);
    35             dp[j]=a[i];
    36             if(j>len)
    37                 len=j;
    38         }
    39         printf("%d
    ",len);
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    Vue.js + Flask + echarts + MySQL
    一次挖矿处理
    Docker三剑客之Docker Swarm
    Malleable-C2-Profiles配置
    「持续更新中」最近浏览的网站心得总结
    有关虚拟内存的一点思考
    Qt---ToolBox自由伸展
    mindmaster导出markdown文档
    svg代码嵌入秀米的方法
    css3渐变透明度的写法
  • 原文地址:https://www.cnblogs.com/caterpillarofharvard/p/4229156.html
Copyright © 2020-2023  润新知