NY214 单调递增子序列(二)

简介: 单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0 如:1 9 10 5 11 2 13的最长单调递增子序列是1 9 10 11 13,长度为5。 输入有多组测试数据(

单调递增子序列(二)

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 4
描述

给定一整型数列{a1,a2...,an}(0

如:1 9 10 5 11 2 13的最长单调递增子序列是1 9 10 11 13,长度为5。

输入
有多组测试数据(<=7)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的下一行里有n个整数,表示数列中的所有元素.每个整形数中间用空格间隔开(0
数据以EOF结束 。
输入数据保证合法(全为int型整数)!
输出
对于每组测试数据输出整形数列的最长递增子序列的长度,每个输出占一行。
样例输入
7 1 9 10 5 11 2 13 2 2 -1
样例输出
5 1
来源
[521521]改编
上传者
521521

这道题目数据量增大,说明要用n*log n的方法,即查找的时候用二分查找,这里用的是lower_bound,需头文件algorithm


#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
const int MAXN = 100000 + 5;
int main(){
//    freopen("in.txt", "r", stdin);
    int m, i, a[MAXN];
    while(scanf("%d", &m)!=EOF){
        scanf("%d", &a[0]);
        int top = 1;
        for(i=1; i
            scanf("%d", a+i);
            int k = lower_bound(a, a+top, a[i]) - a;
            if(k==top) top++;
            a[k] = a[i];
        }
        printf("%d\n", top);
    }
    return 0;
}



目录
相关文章
|
6月前
leetcode-738:单调递增的数字
leetcode-738:单调递增的数字
50 0
|
6月前
|
C++
两种解法解决LCR 008. 长度最小的子数组【C++】
两种解法解决LCR 008. 长度最小的子数组【C++】
|
28天前
|
人工智能 Java BI
lanqiao OJ 111 区间位移
lanqiao OJ 111 区间位移
11 0
|
6月前
|
算法 测试技术 C#
前缀和+单调双队列+贪心:LeetCode2945:找到最大非递减数组的长度
前缀和+单调双队列+贪心:LeetCode2945:找到最大非递减数组的长度
|
6月前
|
算法 测试技术 C#
【map】【动态规划】LeetCode2713:矩阵中严格递增的单元格数
【map】【动态规划】LeetCode2713:矩阵中严格递增的单元格数
|
人工智能 算法
Hungry Sequence (找递增数列)
Hungry Sequence (找递增数列)
55 0
|
算法 C++ Python
每日算法系列【LeetCode 926】将字符串翻转到单调递增
每日算法系列【LeetCode 926】将字符串翻转到单调递增
51nod 1255 字典序最小的子序列 (贪心 + stack)
51nod 1255 字典序最小的子序列 (贪心 + stack)
90 0
leetcode 738 单调递增的数字
leetcode 738 单调递增的数字
50 0
leetcode 738 单调递增的数字
leetcode-每日一题1403. 非递增顺序的最小子序列(贪心)
时间复杂度:O(n logn) 其中n时数组长度,对数组进行排序需要O(n logn)的时间,对数组进行遍历需要O(n)的时间
92 0
leetcode-每日一题1403. 非递增顺序的最小子序列(贪心)