CF2066F Curse

题目描述

给定两个整数数组 $a_1, a_2, \ldots, a_n$ 和 $b_1, b_2, \ldots, b_m$。 你需要判断是否可以通过若干次(可能为零)如下操作将数组 $a$ 转换为数组 $b$。 - 在所有 $a$ 的非空子数组$^{\text{∗}}$中,选择一个具有最大和的子数组,并将该子数组替换为任意非空整数数组。 如果可能,你需要构造任意可行的操作序列。约束条件:你的答案中,所有操作使用的替换数组的长度之和不得超过 $n + m$。所有数字的绝对值不得超过 $10^9$。 $^{\text{∗}}$ 如果数组 $a$ 可以通过从数组 $b$ 的开头和结尾删除若干(可能为零或全部)元素得到,则称 $a$ 是 $b$ 的子数组。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 $t$($1 \le t \le 200$)。接下来是每个测试用例的描述。 每个测试用例的第一行包含两个整数 $n, m$($1 \le n, m \le 500$)——数组 $a$ 和 $b$ 的长度。 每个测试用例的第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($-10^6 \le a_i \le 10^6$)——数组 $a$ 的元素。 每个测试用例的第三行包含 $m$ 个整数 $b_1, b_2, \ldots, b_m$($-10^6 \le b_i \le 10^6$)——数组 $b$ 的元素。 保证所有测试用例的 $n$ 之和不超过 $500$。 保证所有测试用例的 $m$ 之和不超过 $500$。

输出格式

对于每个测试用例,如果无法将数组 $a$ 转换为数组 $b$,则输出 $-1$。 否则,在第一行输出操作次数 $0 \leq q \leq n + m$。接下来按执行顺序输出操作,格式如下: 每个操作的第一行输出三个数字 $l, r, k$($1 \leq l \leq r \leq |a|$)。第二行输出 $k$ 个整数 $c_1 \ldots c_k$,表示将子数组 $a_l, \ldots, a_r$ 替换为数组 $c_1, \ldots, c_k$。 所有操作的 $k$ 之和不得超过 $n + m$。此外,必须满足 $-10^9 \leq c_i \leq 10^9$。 你不需要最小化操作次数。

说明/提示

在第一个测试用例中,初始数组按以下方式修改: $$ [2, -3, 2, 0] \to [2, -3, -3] \to [-3, -3, -3] \to [-3, -7, -3] \to [-3, -7, 0] $$ 你可以选择输出空行或不输出。示例中的空行仅为方便阅读添加。 翻译由 DeepSeek R1 完成