CF962D Merge Equals
题目描述
给定一个正整数数组。当数组中至少存在两个相等的元素时,执行如下操作:选择数组中出现次数不少于 $2$ 的最小值 $x$,找到 $x$ 在数组中最左边的两个位置,将左边的那个 $x$ 删除,右边的那个 $x$ 替换为这两个 $x$ 的和(即 $2 \cdot x$)。
请你输出经过上述操作后数组的最终状态。
例如,给定数组 $[3, 4, 1, 2, 2, 1, 1]$,变化过程如下:
$[3, 4, 1, 2, 2, 1, 1] \rightarrow [3, 4, 2, 2, 2, 1] \rightarrow [3, 4, 4, 2, 1] \rightarrow [3, 8, 2, 1]$。
如果给定数组为 $[1, 1, 3, 1, 1]$,变化过程如下:
$[1, 1, 3, 1, 1] \rightarrow [2, 3, 1, 1] \rightarrow [2, 3, 2] \rightarrow [3, 4]$。
输入格式
第一行包含一个整数 $n$($2 \le n \le 150\,000$),表示数组的元素个数。
第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \le a_i \le 10^{9}$),表示数组的元素。
输出格式
第一行输出一个整数 $k$,表示所有操作完成后数组的元素个数。
第二行输出 $k$ 个整数,表示最终数组的元素。
说明/提示
前两个示例已在题目描述中给出。
第三个示例中,所有整数都不相同,因此数组不会发生变化。
由 ChatGPT 4.1 翻译