I1. 最长递增路径(简单版)
每次测试时间限制:2 秒
每次测试内存限制:256 兆字节
这是问题的简单版本。两个版本的区别在于,在这个版本中,第二个测试是 n=100000。本问题不允许使用黑客攻击。
问题描述
我们称一个整数序列 a1,a2,…,an 为距离凸,如果对于每个 1<i<n 都有
[
|a_i - a_{i-1}| < |a_{i+1} - a_i|
]
换句话说,将点 a1,a2,…,an 按顺序放在数轴上,每次下一次跳跃的长度都严格比前一次更长。
给你两个整数 n 和 m。请找到一个长度为 n 的距离凸序列 a,其中包含最多 m 个不同的值。
关于跳跃序列,这意味着你需要 (n−1) 次跳跃,跳跃距离严格递增,同时最多访问 m 个不同的点。
对所有 1≤i≤n,必须满足 −1018≤ai≤1018。
输入
输入只有一行,包含两个整数 n 和 m。
本题只有两种测试数据:
- n=8, m=6
- n=100000, m=15000
保证两种测试都有解。
本题不允许使用黑客攻击。
输出
输出一个距离凸序列 a1,a2,…,an,最多包含 m 个不同的值。
对所有 1≤i≤n,必须满足 −1018≤ai≤1018。
如果有多种解,输出任意一个均可。
示例
输入:
8 6
输出:
1 1 3 6 10 3 11 1
注释:
序列 [1,1,3,6,10,3,11,1] 长度为 n=8,包含 5 个不同的值,小于等于 m=6。
连续数值之间的差为 0,2,3,4,−7,8,−10(绝对值:0,2,3,4,7,8,10),是一个严格递增的序列。
[1,1,2,4,8,16,32,1] 也是一个合理的答案。