当前位置: 首页 > news >正文

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

单调递增子序列(二)

时间限制: 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;
}



相关文章:

  • 阿里巴巴已拿下中国互联网半壁江山
  • java_流
  • typedef 优于 #define
  • c# .net core System.Xml.Serialization 需使用包 System.Xml.XmlSerializer补齐属性
  • 无限轮播(循环展示)
  • ArcGIS API for JavaScript开发笔记(一)——ArcGIS for Javascript API 3.14本地部署
  • Vs2017获取Git空仓库后创建解决方案及项目无法推送,推送失败的问题.
  • 【编程程序猿艺术】学习记录1:指针向左翻转法的旋转串
  • Windows XP 死期将至 微软终于伸援手了
  • xen的实时迁移(四)
  • 递归3--棋盘分割
  • android网络开源框架volley(五岁以下儿童)——volley一些细节
  • 查看自己的电脑的内存扩充-最大
  • MySQL错误Another MySQL daemon already running with the same unix socket.v
  • CSS制作响应式正方形及其应用
  • co模块的前端实现
  • go append函数以及写入
  • hadoop集群管理系统搭建规划说明
  • jquery cookie
  • js
  • k8s 面向应用开发者的基础命令
  • Median of Two Sorted Arrays
  • Meteor的表单提交:Form
  • React-生命周期杂记
  • Service Worker
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 简析gRPC client 连接管理
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 移动端解决方案学习记录
  • 智能网联汽车信息安全
  • 湖北分布式智能数据采集方法有哪些?
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • # .NET Framework中使用命名管道进行进程间通信
  • #if 1...#endif
  • #控制台大学课堂点名问题_课堂随机点名
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (0)Nginx 功能特性
  • (AngularJS)Angular 控制器之间通信初探
  • (windows2012共享文件夹和防火墙设置
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)iOS字体
  • (转)项目管理杂谈-我所期望的新人
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • *上位机的定义
  • ./configure,make,make install的作用
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 常见的偏门问题
  • .net 流——流的类型体系简单介绍
  • .NET 指南:抽象化实现的基类
  • .php文件都打不开,打不开php文件怎么办
  • @ModelAttribute使用详解
  • @Responsebody与@RequestBody
  • @SuppressWarnings(unchecked)代码的作用