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

    #include<stdio.h>
    #include<string.h>
    #define N 100010
    int a[N],dp[N];
    int binarysearch(int k,int len)
    {
    	int right=len;
    	int left=1;
    	int mid=(right+left)>>1;
    	while(left<=right)
    	{
    		if(k==dp[mid])
    			return mid;
    		if(k>dp[mid])
    			left=mid+1;
    		else 
    			right=mid-1; 
    		mid=(right+left)>>1;
    	 } 
    	 return left;
    } 
    int main()
    {
    	int n;
    	while(scanf("%d",&n)!=EOF)
    	{
    		int len,t;
    		for(int i=0;i<n;i++)
    			scanf("%d",&a[i]);
    		len=1;
    		dp[1]=a[0];
    		for(int i=1;i<n;i++)
    		{
    			t=binarysearch(a[i],len);
    			dp[t]=a[i];
    			if(t>len)
    				len=t; 
    		}
    		printf("%d
    ",len);
    	 } 
    	 return 0;
    }        
    

      

  • 相关阅读:
    第二周:Python3的内存管理
    第一周:JDBC中批量插入数据问题
    PyTorch对ResNet网络的实现解析
    三素数定理的证明及其方法(二)
    三素数定理的证明及其方法(一)
    羊车门问题
    对python语言学习的期待
    My first page
    windowns右键notepad++ 打开文件
    Idea里新建类的快捷键
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7053344.html
Copyright © 2011-2022 走看看