CF773C Prairie Partition

题目描述

可以证明,任何正整数 $x$ 都可以唯一地表示为 $x = 1 + 2 + 4 + \dots + 2^{k-1} + r$,其中 $k$ 和 $r$ 是整数,$k \geq 0$,$0 < r \leq 2^k$。我们称这种表示为 $x$ 的“prairie partition”。 例如,$12$、$17$、$7$ 和 $1$ 的 prairie partition 分别为: $12 = 1 + 2 + 4 + 5$,$17 = 1 + 2 + 4 + 8 + 2$, $7 = 1 + 2 + 4$, $1 = 1$。 Alice 拿到一个正整数序列(元素可重复),用每个元素对应 prairie partition 序列的所有加数替换每个元素,然后将所有数按非降序排列,得到一个新序列交给了 Borys。现在 Borys 想知道,Alice 的原始序列可能有多少种长度。请找出所有可能的长度!

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 10^5$)——Borys 拿到的数的数量。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \leq a_i \leq 10^{12}$;$a_1 \leq a_2 \leq \dots \leq a_n$)——Borys 得到的序列。

输出格式

请按升序输出所有可能的 $m$,使得存在一个长度为 $m$ 的正整数序列,经过 prairie partition 展开并排序后,得到输入的序列。 如果不存在这样的 $m$,输出一个整数 $-1$。

说明/提示

在第一个样例中,Alice 可以以 $[6,20]$ 作为原始序列获得输入的序列。 在第二个样例中,Alice 的原始序列可以是 $[4,5]$,也可以是 $[3,3,3]$。 由 ChatGPT 5 翻译