CSPSMK03B. 序列(sequence)

提交5 通过2
通过率40%
文件IO启用
输入文件sequence.in
输出文件sequence.out
时间限制1500ms
内存限制512MiB
    ID: 14532 传统题 文件IO 输入文件:sequence.in 输出文件:sequence.out 1500ms 512MiB 尝试: 5 已通过: 2 难度: 普及+/提高- 上传者: 标签>C++CSP-S考前模拟

题目描述

题目描述

给定一个包含 nn 个整数的序列 aa,以及两个整数 ll 和 rr。你需要找到序列 aa 的最长子序列 bb,使得对于所有 1≤i<∣b∣1 \le i < |b|,满足 l≤bi+bi+1≤rl \le b_i + b_{i+1} \le r。这里 ∣b∣|b| 表示序列 bb 的元素个数。换句话说,你需要选择一个子序列,使得任意相邻两个数的和既不小于 ll,也不大于 rr。

一个数组的子序列是指通过从原序列中删除若干(可以是零个)元素得到的序列。

输入格式

第一行包含三个整数 nn、ll、rr。

第二行包含 nn 个整数 aia_i——序列的描述。

输出格式

输出一个整数——这样的子序列 bb 的最大长度。

输入样例 #1

5 2 6
1 3 4 2 5

输出样例 #1

3

输入样例 #2

2 1 1
1 1

输出样例 #2

1

说明提示

在第一个示例中,你可以选择子序列 [1,3,2][1, 3, 2]。2≤1+3≤62 \leq 1 + 3 \leq 6,2≤3+2≤62 \leq 3 + 2 \leq 6。

你也可以选择 [1,4,2][1, 4, 2]。

  • (11 分):所有 aia_i 都相同;

  • (33 分):对所有 1≤i≤n−21 \le i \le n-2,ai=ai+2a_i = a_{i+2};

  • (99 分):n≤20n \le 20;

  • (88 分):n≤5000n \le 5000;

  • (99 分):r−l≤10r - l \le 10;

  • (1010 分):l=1l = 1,r≤106r \le 10^6;

  • (1313 分):r≤106r \le 10^6;

  • (1010 分):l=1l = 1;

  • (2424 分):n≤105n \le 10^5;

  • (1313 分):无额外限制。

输入样例 #3

1 667969 882349
324536

输出样例 #3

1

数据范围

(1≤n≤5⋅1051 \le n \le 5 \cdot 10^5,1≤l≤r≤10171 \le l \le r \le 10^{17})

(1≤ai≤r1 \le a_i \le r)