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

      

  • 相关阅读:
    BZOJ2219数论之神——BSGS+中国剩余定理+原根与指标+欧拉定理+exgcd
    Luogu 3690 Link Cut Tree
    CF1009F Dominant Indices
    CF600E Lomsat gelral
    bzoj 4303 数列
    CF1114F Please, another Queries on Array?
    CF1114B Yet Another Array Partitioning Task
    bzoj 1858 序列操作
    bzoj 4852 炸弹攻击
    bzoj 3564 信号增幅仪
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7053344.html
Copyright © 2011-2022 走看看