K 题 题解 在数组 中,每个给出的 前一定有一段 的子序列,不妨把这段子序列连续地放在 前,之后判断构造出的数组 是否合法。 数组 合法即 且不存在两个相邻的数后者与前者之差大于 。 之后,考虑 的位置,因为 是最小的,每次出现一定会将栈清空且无法被之后的数清空,所以 一定在最右的 处。 接下来考虑 的位置,因为此时 是剩下未使用过的数中最小的数,所以 会在次右的 或最右的 处。 …… 重复以上步骤直至将 个数放完。 即,将构造好的数组 按值从小到大,位置从右至左的顺序依次赋上 即可。 代码 #include <bits/stdc++.h> using namespace std...