CF1042C Array Product

题目描述

给定一个包含 $n$ 个整数的数组 $a$。你可以对其进行以下操作: 1. 选择两个位置 $i$ 和 $j$($1 \le i, j \le n, i \ne j$),将 $a_i \cdot a_j$ 的值写入第 $j$ 个单元格,并从第 $i$ 个单元格中移除该数字; 2. 选择某个位置 $i$,并从第 $i$ 个单元格中移除该数字(该操作最多只能执行一次,且可以在任意时刻执行,不一定要在开始时)。 每次操作后,数组中的元素数量减少 $1$。但下标保持不变。被移除的数字不能在后续操作中使用。 你的任务是对数组恰好执行 $n-1$ 次操作,使得数组中最后剩下的唯一数字尽可能大。由于这个数字可能非常大,你无需输出它本身,而是需要输出任意一种能够得到最大值的操作序列。请阅读输出格式以了解具体要求。

输入格式

第一行包含一个整数 $n$($2 \le n \le 2 \cdot 10^5$),表示数组中的元素个数。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($-10^9 \le a_i \le 10^9$),表示数组的元素。

输出格式

输出 $n-1$ 行。第 $k$ 行应包含两种操作之一。 第一种操作格式为:$1~i_k~j_k$,其中 $1$ 表示操作类型,$i_k$ 和 $j_k$ 表示所选元素的位置。 第二种操作格式为:$2~i_k$,其中 $2$ 表示操作类型,$i_k$ 表示所选元素的位置。注意,这种操作最多只能出现一次。 如果存在多种能得到最大值的操作序列,输出任意一种均可。

说明/提示

设 $X$ 为被移除的数字。下面是所有示例的操作过程: 第一个示例的操作序列之一为:$[5, -2, 0, 1, -3] \to [5, -2, X, 1, -3] \to [X, -10, X, 1, -3] \to [X, X, X, -10, -3] \to [X, X, X, X, 30]$。因此,最大答案为 $30$。注意,其他能得到 $30$ 的操作序列也是正确的。 第二个示例的操作序列之一为:$[5, 2, 0, 4, 0] \to [5, 2, X, 4, 0] \to [5, 2, X, 4, X] \to [X, 10, X, 4, X] \to [X, X, X, 40, X]$。以下答案也是允许的: `

1 5 3

1 4 2

1 2 1

2 3

` 此时数组的变化过程为:$[5, 2, 0, 4, 0] \to [5, 2, 0, 4, X] \to [5, 8, 0, X, X] \to [40, X, 0, X, X] \to [40, X, X, X, X]$。 第三个示例的操作序列为:$[2, -1] \to [2, X]$。 第四个示例的操作序列为:$[0, -10, 0, 0] \to [X, 0, 0, 0] \to [X, X, 0, 0] \to [X, X, X, 0]$。 第五个示例的操作序列为:$[0, 0, 0, 0] \to [X, 0, 0, 0] \to [X, X, 0, 0] \to [X, X, X, 0]$。 由 ChatGPT 4.1 翻译