美文网首页
CF #506(Div.3) B:子序列问题

CF #506(Div.3) B:子序列问题

作者: RecCall | 来源:发表于2018-09-10 08:34 被阅读0次

题目描述

n 道不同难度的题,你要从中选出合适的题目组成一套竞赛试题。试题各题之间难度逐级递增,且除最后一题以外每道题的难度不低于后一道题的一半。求试题最多可以包含的题数。

输入

输入第一行含有一个整数 n (1 ≤ n ≤ 2 * 10 ^ 5) ,表示题目的个数。
输入第二行含有 n 个整数 a[1], a[2], ... , a[n] (a[i] ≤ 10 ^ 9) ,表示各个题目的难度。输入保证不重复且从小到大排列。

输出

输出一个表示最大题数的整数。

样例

Input

10
1 2 5 6 7 10 21 23 24 49

Output

4

题目分析

可以把每个输入看作只具有“连续”(a[i] ≤ a[i-1] * 2 )和“断开”(a[i] > a[i-1] * 2)两种状态。容易得知若 a[m]a[n] 连续则 a[m], a[m+1], ... , a[n] 皆连续,故问题化为求最大连续子序列。

此类问题有通用的 O(n) 、online 算法,代码如下。

AC代码

#include<iostream>
#include<algorithm>
constexpr int maxin{1000000003};
int main() {
    std::ios::sync_with_stdio(false);
    int n; std::cin >> n;
    int max{0};
    int prev{maxin}, cnt{0}; for (int i{0}; i < n; ++i) {
        int tmp; std::cin >> tmp;
        if (tmp <= prev * 2) {prev = tmp; ++cnt;}
        else {max = std::max(max, cnt); prev = tmp; cnt = 1;}
    }
    std::cout << std::max(max, cnt) << std::endl;
}

相关文章

  • CF #506(Div.3) B:子序列问题

    题目描述 有 n 道不同难度的题,你要从中选出合适的题目组成一套竞赛试题。试题各题之间难度逐级递增,且除最后一题以...

  • Java算法:求两个字符串的最长公共子序列问题

    最长公共子序列问题: 给定两个字符串A、B,求A与B的最长公共子序列(子序列不要求是连续的)举例:字符串A: ab...

  • 舞钢W-B610CF钢板(交货状态和执行标准)

    舞钢W-B610CF钢板(交货状态和执行标准) 1、W-B610CF钢板介绍 W-B610CF钢板简称CF钢属于低...

  • 算法(04)动态规划

    零钱问题 背包问题 最长公共子序列 最长公共子串 最长上升子序列 最大连续子序列和

  • 子序列问题

    最长公共子序列 最长上升/下降/不升/不降子序列

  • 子序列问题

    本篇讲解四道子序列相关题目 1. 最长摆动子序列(No. 376) 题目 摆动序列是指相邻数字的差正负交替(不包括...

  • 子序列问题

    判断序列S是否是序列T的子序列 解析:典型的双指针问题 Code

  • 子序列问题

    一些子序列问题 (持续补充) 最长上升子序列 题目 dp数组,每一个数组记录前面最长的上升序列长度。 和标程对比 ...

  • 最长公共子序列问题解析

    问题解读 最长公共子序列问题,就是找出两个字符串中,存在的最长的子序列 什么是子序列呢?子序列不同于公共子串,子串...

  • 动态规划常见面试题

    子序列类型编辑距离 最长递增子序列 最大子数组 最长公共子序列 背包问题0-1背包问题 子集背包问题 完全背包问题...

网友评论

      本文标题:CF #506(Div.3) B:子序列问题

      本文链接:https://www.haomeiwen.com/subject/myujgftx.html