nyoj 214 单调递增子序列(二) 【另类dp】
2024-08-28 04:58:37
单调递增子序列(二)
时间限制: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
分析:跟hdoj1025原理http://blog.csdn.net/shengweisong/article/details/40347947一样
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define M 100005
using namespace std; int a[M], d[M]; int bis(int m, int len){
int left = 1, right = len, mid;
while(left <= right){
mid = (right+left)>>1;
if(d[mid] > m) right = mid-1;
else if(d[mid]< m) left = mid+1;
else return mid;
}
return left;
} int main(){
int n;
while(~scanf("%d", &n) ){
memset(d, 0, sizeof(d));
int i, len;
for(i = 0; i < n; i ++){
scanf("%d", &a[i]);
}
//sort(a, a+n);
len = 1;
d[len] = a[i];
for(i = 1; i < n; i ++){
int t = bis(a[i], len);
d[t] = a[i];
if(t>len) len++;
}
printf("%d\n", len);
}
return 0;
}
最新文章
- iOS开发之浅谈MVVM的架构设计与团队协作
- OData 带更新的实例,并能取得元数据格式类型
- PHP 线程安全与非线程安全版本的区别深入解析
- JS验证金额
- Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
- ProtoType(原型)-对象创建型模式
- 基于.net mvc的校友录(七、文件上传以及多对多关系表的LINQ查询实现)
- 使用git了解代码编写过程
- VisualBox会造成VPN连接不上问题
- codeforces --- 279C Ladder
- ASP.NET- Web.Config配置大文件上传
- 解决Mac OS Adobe Flash Builder 4.7 java heap space 问题【转】
- android开发SD卡工具类(一)
- win8.1镜像制作
- ubuntu 下配置Web服务器
- python基础(五)
- Spring使用MappingJackson2MessageConverter发送接收ActiveMQ消息
- 【转】Git 教程之协同开发
- webservice调用dll
- Jboss的jmx-console中查看内存和线程状态
热门文章
- 从Oracle Database 角度来看浪潮天梭K1主机的操作系统选择
- C#重构经典全面汇总
- List of content management systems
- spark rdd saveAsTextFile保存为文件
- nyoj--1184--为了肾六(动态规划+滚动数组)
- caffe(4) 激活层(Activation Layers)及参数
- kubernetes学习与实践篇(一)主要概念介绍
- md5sum---文件校验和
- 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(hash写法)
- bootstrap结合google code prettify的问题