#P14672. [ICPC 2025 Seoul R] CPEquivalence

    ID: 14597 远端评测题 2000ms 1024MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>动态规划 DP2025动态规划优化ICPC笛卡尔树首尔

[ICPC 2025 Seoul R] CPEquivalence

Description

给定一个由整数组成的整数数组 xx(即 xx 的每个元素都是整数),其最近位置数组(CP-数组)CP(x)CP(x) 是一个长度为 x|x| 的数组,定义为:

$$CP(x)[i] = \max(\{j \mid j < i; x[j] \ge x[i]\} \cup \{-1\}) \quad \text{对所有 } 0 \le i < |x|,$$

其中 x[i]x[i] 表示 xx 中的第 ii 个整数,长度 x|x|xx 中整数的个数。换句话说,CP(x)[i]CP(x)[i]xx 中小于 ii 且该索引处的元素大于或等于 x[i]x[i] 的最大索引。例如,当 x=[64,2,5,100,100]x = [64, 2, 5, 100, 100] 时,其 CP-数组是 CP(x)=[1,0,0,1,3]CP(x) = [-1, 0, 0, -1, 3],且 x=5|x| = 5

我们称两个整数数组 xxyyCP 等价的,如果 CP(x)=CP(y)CP(x) = CP(y)。显然,两个 CP 等价的整数数组 xxyy 具有相同的长度。例如,两个数组 x=[64,2,5,100,100]x = [64, 2, 5, 100, 100]y=[3,1,2,4,1]y = [3, 1, 2, 4, 1] 是 CP 等价的,因为它们的 CP-数组相同,都是 [1,0,0,1,3][-1, 0, 0, -1, 3]

对于一个整数数组 xx、一个整数 aa 和一个非负整数 i<xi < |x|,在位置 iixx 进行替换操作aa,返回数组 $[x[0], x[1], \cdots, x[i-1], a, x[i+1], \cdots, x[|x|-1]]$。对于一个整数数组 xx 和一个非负整数 i<xi < |x|,在位置 iixx 进行删除操作,返回数组 $[x[0], x[1], \cdots, x[i-1], x[i+1], \cdots, x[|x|-1]]$。最后,对于一个整数数组 xx、一个整数 aa 和一个非负整数 ixi \le |x|,在位置 iixx 进行插入操作aa,返回数组 $[x[0], x[1], \cdots, x[i-1], a, x[i], \cdots, x[|x|-1]]$。对 xx编辑操作是指在单个位置进行的插入、删除或替换操作之一。

给定两个整数数组 xxyy,计算对 yy 进行编辑操作的最小次数,以获得一个满足 CP(x)=CP(y)CP(x) = CP(y') 的数组 yy'

例如,设 x=[64,2,5,100,100]x = [64, 2, 5, 100, 100]y=[5,5,5,5]y = [-5, -5, -5, -5]。考虑数组 y=[5,6,5,4,5]y' = [-5, -6, -5, -4, -5]。那么,我们有 CP(y)=[1,0,0,1,3]CP(y') = [-1, 0, 0, -1, 3],因此 xxyy' 是 CP 等价的。然后,我们可以通过对 yy 应用两次编辑操作来获得整数数组 yy',且这是最小的次数。

Input Format

你的程序需要从标准输入读取数据。输入由三行组成。第一行包含两个整数 nnmm (1n401 \le n \le 40; 1m401 \le m \le 40),分别表示 xxyy 的长度。第二行包含 nn 个介于 1,000,000-1,000,0001,000,0001,000,000(含)之间的整数,表示数组 xx。第三行包含 mm 个介于 1,000,000-1,000,0001,000,0001,000,000(含)之间的整数,表示数组 yy

Output Format

你的程序需要向标准输出写入数据。输出恰好一行,包含对 yy 进行编辑操作以获得一个满足 CP(x)=CP(y)CP(x) = CP(y') 的整数数组 yy' 所需的最小操作次数。

5 5
64 2 5 100 100
3 1 2 4 1
0
5 4
64 2 5 100 100
-5 -5 -5 -5
2
6 5
1 2 3 4 5 6
2 5 3 4 5
3
6 3
1 3 5 2 5 2
5 5 6
3

Hint

翻译由 DeepSeek V3 完成