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 翻译