单调递增子序列(二)

时间限制: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
来源
[521521]改编
上传者
ACM_赵铭浩
 
 #include <stdio.h>
#include <string.h>
int s[];
int longest[];
int main()
{
int m;
while(scanf("%d",&m)!=EOF)
{
int i,j,max;
for(i=;i<m;i++)
scanf("%d",&s[i]);
for(i=;i<m;i++)
longest[i]=;
for(j=;j<m;j++)
{
for(i=;i<j;i++)
if(s[j]>s[i]&&(longest[j]<longest[i]+))
longest[j]=longest[i]+;
}
max=longest[];
for(i=;i<m;i++)
if(longest[i]>max)
max=longest[i];
printf("%d\n",max);
}
return ;
}
//TML

//TML

 #include <stdio.h>
#include <string.h>
int s[];
int b[];
int f(int a,int w)
{
int left,right,mid;
left=;right=a-;
while(left<=right)
{
mid=(left+right)/;
if(b[mid]>w)
right=mid-;
else if(b[mid]<w)
left=mid+;
else//找到了该元素,则直接返回
return mid;
}
return left;//数组b中不存在该元素,则返回该元素应该插入的位置
}
int main()
{
int m;
while(scanf("%d",&m)!=EOF)
{
int i,j,len;
for(i=;i<m;i++)
scanf("%d",&s[i]);
len=;b[]=s[];
for(i=;i<m;i++)
{
if(s[i]>b[len-])
b[len++]=s[i];//如果大于B中最大的元素,则直接插入到B数组末尾
else
b[f(len,s[i])]=s[i]; //二分查找需要插入的位置
}
printf("%d\n",len);
}
return ;
}
//O(logN)求最长递增子序列

//AC

nyoj_214_单调递增子序列(二)_201403182131的更多相关文章

  1. nyoj 单调递增子序列(二)

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长 ...

  2. nyist oj 214 单调递增子序列(二) (动态规划经典)

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 ,a2...,an}(0<n<=100000).找出单调递增最长子序列,并求出其长度 ...

  3. ny214 单调递增子序列(二) 动态规划

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长子序 ...

  4. nyoj 214 单调递增子序列(二)

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ,a2...,an}(0<n<=100000),找出单调递增最长子序列,并求出其长度. ...

  5. nyoj 214——单调递增子序列(二)——————【二分搜索加dp】

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长 ...

  6. nyoj 214 单调递增子序列(二) 【另类dp】

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 ,a2...,an}(0<n<=100000),找出单调递增最长子序列.并求出其长度 ...

  7. NYOJ-214 单调递增子序列(二) AC 分类: NYOJ 2014-01-31 08:06 233人阅读 评论(0) 收藏

    #include<stdio.h> #include<string.h> int len, n, i, j; int d[100005], a[100005]; int bin ...

  8. NYOJ-214 单调递增子序列(二) TLE 分类: NYOJ 2014-01-28 22:57 171人阅读 评论(0) 收藏

    #include<stdio.h> #include<stdlib.h> #define max(x,y) x>y?x:y #define MAXX 100005 int ...

  9. nyoj--214--单调递增子序列(二)(二分查找+LIS)

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长子序 ...

随机推荐

  1. 前端javascript 错误 Uncaught SyntaxError: Unexpected token ILLEGAL

    前端控制台报Uncaught SyntaxError: Unexpected token ILLEGAL 错误时,就是非法字符错误,首先检查符号是否正确,不要出现中文标点! 然后检查参数之类的类型是否 ...

  2. List 的属性与方法整理

    List<T> 类与 ArrayList 类比较类似.它实现了 IList<T> 泛型接口,长度可以动态增加. 可以使用 Add 或 AddRange 方法将项添加到 List ...

  3. .Net实战之反射外卖计费

    场景 叫外卖支付,可以有以下优惠: 1.  满30元减12 2.  是会员减配送费,比如5元 3.  优惠券 …. 问题? 如何在不改代码的情况下更灵活的去控制优惠的变化??? 有些代码与实际业务可能 ...

  4. JavaScript(十三)面向对象

    面向对象 面向对象的过程 通过new 构造函数 生成的对象来执行, 类似于事件的执行  this指向函数,然后再把这个函数赋值给一个实例  所以在函数内的this  就指到了实例上 function ...

  5. Matlab2014的下载和安装激活过程

    Matlab2014的下载和安装过程 转载自csdn  https://blog.csdn.net/hp910315/article/details/70197149 1 下载Matlab2014,下 ...

  6. JavaScript设计模式 (1) 原型模式

    原型模式(Prototype):用原型实例指向创建类对象,使用于创建新对象的类共享原型对象的属性以及方法. //图片轮播类 var LoopImages = function (imgArr, con ...

  7. HDU_2544_最短路

    题意:第一个路口是起点,第n个(最后一个)路口是终点,问最短路径. 总结:第一个dijkstra. 代码: #include<iostream> #include<cstdio> ...

  8. C# 字符串每隔两个 提取

    private void button3_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); str ...

  9. 并发编程学习笔记(11)----FutureTask的使用及实现

    1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口 ...

  10. javascript底层练习

    1.请看下列代码: function F(){ function C(){ return this; } return C(); } var o=new F(); 请问上面的this值指向的是全局对象 ...