CF926E Merge Equal Elements

题目描述

给定一个正整数序列 $a_{1},a_{2},...,a_{n}$。 你可以进行如下操作:找到一对相等的相邻元素。如果存在多对这样的元素,选择最左边的一对(即下标最小的一对)。假设这两个整数等于 $x$,则将它们都删除,并在它们的位置插入一个整数 $x+1$。这样,每次操作后序列的长度减少 $1$。 当序列中不存在相等的相邻元素时,停止操作。 例如,初始序列为 $[5,2,1,1,2,2]$,第一次操作后得到 $[5,2,2,2,2]$,第二次操作后得到 $[5,3,2,2]$,第三次操作后得到 $[5,3,3]$,第四次操作后得到 $[5,4]$。此时序列中已没有相等的相邻元素,操作结束。 请你输出最终的序列。

输入格式

第一行包含一个整数 $n$($2 \leq n \leq 2 \cdot 10^{5}$),表示序列的长度。 第二行包含 $n$ 个整数 $a_{1},a_{2},...,a_{n}$($1 \leq a_{i} \leq 10^{9}$)。

输出格式

第一行输出一个整数 $k$,表示操作结束后序列的长度。 第二行输出 $k$ 个整数,表示操作结束后的序列。

说明/提示

第一个样例已在题目描述中给出。 第二个样例,初始序列为 $[1000000000,1000000000,1000000000,1000000000]$。第一次操作后序列变为 $[1000000001,1000000000,1000000000]$。第二次操作后序列变为 $[1000000001,1000000001]$。第三次操作后序列变为 $[1000000002]$。 第三个样例,初始序列中没有相等的相邻元素,因此序列不变。 由 ChatGPT 4.1 翻译