zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Linux下安装Apache2.4.43踩坑记录
    网络代理条件下配置git
    docker存储驱动的选择
    Python列表排序
    解决apache无法启动No space left on device
    Flask匹配url使用正则表达式
    Web安全-客户端脚本安全
    springboot中的一些好用注解
    基于cdn方式的vue+element-ui的单页面架构
    干货网站
  • 原文地址:https://www.cnblogs.com/caterpillarofharvard/p/4229156.html
Copyright © 2011-2022 走看看