AT_tkppc3_h 新入生歓迎数列 - Hard

题目描述

配点:$1000$ 分 パ研的新生 PAKEN 君从 E869120 那里得到了一个长度为 $N$ 的数列 $P = \{P_1, P_2, P_3, \ldots, P_N\}$。**最开始,$P$ 的所有元素均为 $0$。** PAKEN 君打算通过对数列 $P$ 进行如下操作,操作顺序任意,总共不超过 $550\,000$ 次,将该数列变为 $A = \{A_1, A_2, A_3, \ldots, A_N\}$。 - 操作 1:选择一个 $1$ 到 $N$ 之间的整数 $x$,将 $P_x$ 的值变为 $1$。 - 操作 2:选择 $1$ 到 $N$ 之间的整数 $y, z$,将 $P_z$ 的值加到 $P_y$ 上。此时 $y$ 可以等于 $z$。**此外,$P_y$ 的值不能超过 $10^{18}$。** PAKEN 君还很年幼,不知道该如何操作。为了帮助他,你需要给出一种操作方案的示例。

输入格式

输入从标准输入读入,格式如下: > $N$ $A_1$ $A_2$ $A_3$ ... $A_N$

输出格式

输出到标准输出,格式如下: > $Q$ > (第 $1$ 次操作的信息) > (第 $2$ 次操作的信息) > ... > (第 $Q$ 次操作的信息) 首先输出操作次数 $Q$。**$Q$ 必须是 $0$ 到 $550\,000$ 之间的整数。**接下来的 $Q$ 行,每行描述一次操作,格式如下: (☆)执行操作 1 时: > $1$ $x$ 表示将 $P_x$ 设为 $1$。 (★)执行操作 2 时: > $2$ $y$ $z$ 表示将 $P_z$ 的值加到 $P_y$ 上。

说明/提示

## 限制条件 - $N$ 是 $2$ 到 $200\,000$ 之间的整数。 - $A_1 = 1$。 - $A_i$($1 \leq i \leq N$)是 $1$ 到 $2^{30} - 1$ 之间的整数。 ## 子任务 子任务 1 \[$60$ 分\] - 满足 $N = 2$。 子任务 2 \[$140$ 分\] - 满足 $N \leq 8\,000$。 子任务 3 \[$80$ 分\] - 满足 $N \leq 16\,000$。 子任务 4 \[$230$ 分\] - 满足 $N \leq 25\,000$。 子任务 5 \[$270$ 分\] - 满足 $N \leq 160\,000$。 子任务 6 \[$220$ 分\] - 无额外限制。 由 ChatGPT 4.1 翻译