CF722D Generating Sets

题目描述

给定一个包含 $n$ 个互不相同的正整数 $y_1, y_2, ..., y_n$ 的集合 $Y$。 若存在一个包含 $n$ 个互不相同正整数 $x_1, x_2, ..., x_n$ 的集合 $X$,使得可以通过对 $X$ 中的整数施加若干次如下两种操作,将 $X$ 变换成 $Y$,则称 $X$ 能生成 $Y$: 1. 选取任意 $x_i$,替换为 $2 \times x_i$。 2. 选取任意 $x_i$,替换为 $2 \times x_i + 1$。 注意,操作过程中 $X$ 中的元素不必始终互不相同。 如果 $X$ 和 $Y$ 都是互不相同的整数集合,当且仅当它们作为集合相等时,才认为它们相等。也就是说,如果将集合的元素按升序排列,两个数组相等。 注意,任意整数集合(或其排列)都可以生成其自身。 现在给定集合 $Y$,请你找到一个能生成 $Y$ 的集合 $X$,使得 $X$ 中的最大元素尽可能小。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 50000$),表示 $Y$ 中的元素个数。 第二行包含 $n$ 个互不相同的整数 $y_1, ..., y_n$($1 \leq y_i \leq 10^{9}$)。

输出格式

输出 $n$ 个互不相同的正整数,表示能生成 $Y$ 的集合 $X$,且 $X$ 的最大值最小。如果有多组解,输出任意一组均可。

说明/提示

由 ChatGPT 5 翻译