CF2147I2 Longest Increasing Path (Hard Version)
题目描述
这是本题的 Hard 版本。不同之处在于本版本的第二个测试点为 $n=300\,000$。本题不允许 Hack。
我们称一个整数序列 $a_1, a_2, \ldots, a_n$ 为距离凸序列(distance-convex),如果对每个 $1 < i < n$,都有 $|a_{i} - a_{i-1}| < |a_{i+1} - a_{i}|$。换句话说,如果你按照 $a_1, a_2, \ldots, a_n$ 的顺序依次跳跃,则每一次跳跃的距离都严格大于上一次。
现在给定两个整数 $n$ 和 $m$。请你找到一个长度为 $n$,且不超过 $m$ 个不同数值的距离凸序列 $a$。从跳跃的角度来看,意味着你要完成 $n-1$ 次递增跳跃,但至多经过 $m$ 个不同的点。对于所有 $1 \leq i \leq n$,需要满足 $-10^{18} \leq a_i \leq 10^{18}$。
输入格式
输入包含两个整数 $n$ 和 $m$。
本题共两个测试点:
- $n = 8$,$m = 6$;
- $n = 300\,000$,$m = 15\,000$。
保证对于所有测试点都存在解。本题不允许 Hack。
输出格式
输出一个距离凸序列 $a_1, a_2, \ldots, a_n$,其中最多包含 $m$ 种不同的数值。对于所有 $1 \leq i \leq n$,满足 $-10^{18} \leq a_i \leq 10^{18}$。
如果存在多组解,请输出其中任意一组。
说明/提示
序列 $[1, 1, 3, 6, 10, 3, 11, 1]$ 的长度为 $n=8$,包含 $5$ 个不同的数值,小于等于 $m=6$。相邻元素的差值序列为 $0,2,3,4,7,8,10$,严格递增。
$[1, 1, 2, 4, 8, 16, 32, 1]$ 也是一个合法答案。
由 ChatGPT 5 翻译