一、题目
1、题目描述
2、输入输出
2.1输入
2.2输出
3、原题链接
1059C - Sequence Transformation
二、解题报告
1、思路分析
n = 1,2,3的情况从样例已知
考虑n >= 4的情况
我们考虑要字典序最大,自然要最早出现非1的数,那么应该出现几?
2 的倍数[n / 2]个, 3 的 倍数[n / 3]个,如果想出现2就得筛掉n - [n / 2]个数,想出现3就得筛掉n - [n / 3]个数……
显然先出现2最优
即:每次拿出所有奇数,对应奇数个数个1,然后变成了n / 2的子问题,只不过我们的基数为2,如此递归下去……
2、复杂度
时间复杂度: O(N)空间复杂度:O(N)
3、代码详解
import sysinput = lambda: sys.stdin.readline().strip()
MII = lambda: map(int, input().split())
LMI = lambda: list(map(int, input().split()))
LI = lambda: list(input())
II = lambda: int(input())
fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
P = 10**9 + 7def solve():n = II()def foo(n: int) -> list[int]:if n <= 3:return [1] * (n - 1) + [n]return [1] * (n - n // 2) + [x * 2 for x in foo(n // 2)]print(' '.join(map(str, foo(n))))if __name__ == "__main__":solve()