#P15278. [MCO 2025] Subsequence

    ID: 17360 远端评测题 2000ms 256MiB 尝试: 0 已通过: 0 显示难度提高 上传者: 标签>动态规划 DP线段树2025MCC/MCO(马来西亚)

[MCO 2025] Subsequence

题目描述

给定一个数组 aa 和一个整数 XX,你的任务是找出数组 aa 中最长的 有效 子序列。一个子序列是 有效 的,当且仅当该子序列中任意相邻元素的乘积都不超过 XX。也就是说,设 bb 是 aa 的一个长度为 mm 的子序列,则 bb 是 有效 的,当且仅当对于任意 ii (1≤i≤m−11 \leq i \leq m-1),都有 bi⋅bi+1≤Xb_i \cdot b_{i+1} \leq X。

注意:数组 bb 是另一个数组 aa 的子序列,当且仅当 bb 可以通过从数组 aa 中移除若干元素(也可以不移除)且不改变剩余元素的顺序得到。例如,数组 [1,3][1,3] 是 [1,2,3][1,2,3] 的一个子序列,而数组 [2,1][2,1] 和数组 [1,4][1,4] 不是 [1,2,3][1,2,3] 的子序列。

输入格式

第一行包含两个以空格分隔的整数 nn (1≤n≤1051 \leq n \leq 10^5)和 XX (0≤∣X∣≤10180 \leq |X| \leq 10^{18})—— nn 是数组 aa 的长度,XX 是给定的整数。

第二行包含 nn 个以空格分隔的整数 a1,a2,…,ana_1, a_2, \dots, a_n (1≤∣ai∣≤1091 \leq |a_i| \leq 10^9)。

输出格式

输出一行一个整数,表示最长 有效 子序列的长度。

1 10
100
1
5 10
3 4 2 5 1
4
5 10
6 -2 -2 -6 5
4

提示

注释

示例 1
只有一个元素的子序列总是有效的,因为不存在相邻元素。因此,最长有效子序列的长度为 11。

示例 2
本例中有一个有效子序列 [3,2,5,1][3,2,5,1]。其相邻元素的乘积均不超过 1010,如下所示:

  • 3×2=6 (≤10)3 \times 2 = 6 \,(\leq 10)
  • 2×5=10 (≤10)2 \times 5 = 10 \,(\leq 10)
  • 5×1=5 (≤5)5 \times 1 = 5 \,(\leq 5)

子序列 [3,4‾,2,5,1][\underline{3,4},2,5,1](即原数组 aa)是 无效 的,因为第一个和第二个元素的乘积为 1212,超过了 1010。

因此,最长有效子序列的长度为 44。

示例 3
本例中最长有效子序列是 [6,−2,−2,5][6,-2,-2,5]。

子序列 [6,−2,−2,−6‾,5][6,-2,\underline{-2, -6}, 5](即原数组 aa)是 无效 的,因为第三个和第四个元素的乘积为 −2×−6=12-2 \times -6 = 12,超过了 1010。

计分

子任务 1 (55 分): X=1018X = 10^{18}

子任务 2 (1515 分): n≤20n \leq 20

子任务 3 (2020 分): n≤103n \leq 10^3

子任务 4 (1010 分): X≥0X \geq 0,且对于所有 1≤i≤n1 \leq i \leq n,有 1≤ai≤2001 \leq a_i \leq 200

子任务 5 (2020 分): X≥0X \geq 0,且对于所有 1≤i≤n1 \leq i \leq n,有 1≤ai≤1051 \leq a_i \leq 10^5

子任务 6 (1010 分): X≥0X \geq 0,且对于所有 1≤i≤n1 \leq i \leq n,有 ai≥1a_i \geq 1

子任务 7 (2020 分): 无额外限制

翻译由 DeepSeek 完成