CF1208D Restore Permutation
题目描述
一个整数数组 $p_{1},p_{2},\ldots,p_{n}$ 被称为排列,如果它恰好包含 $1$ 到 $n$ 的每个数字各一次。例如,以下数组是排列:$[3,1,2]$,$[1]$,$[1,2,3,4,5]$ 和 $[4,3,1,2]$。以下数组不是排列:$[2]$,$[1,1]$,$[2,3,4]$。
现在有一个长度为 $n$ 的隐藏排列。
对于每个下标 $i$,给定 $s_{i}$,其定义为所有满足 $j < i$ 且 $p_{j} < p_{i}$ 的 $p_{j}$ 之和。换句话说,$s_i$ 是在第 $i$ 个元素之前且小于第 $i$ 个元素的所有元素之和。
你的任务是还原出这个排列。
输入格式
第一行包含一个整数 $n$($1 \le n \le 2 \times 10^{5}$),表示排列的长度。
第二行包含 $n$ 个整数 $s_{1}, s_{2}, \ldots, s_{n}$($0 \le s_{i} \le \frac{n(n-1)}{2}$)。
保证数组 $s$ 对应于一个长度为 $n$ 的合法排列。
输出格式
输出 $n$ 个整数 $p_{1}, p_{2}, \ldots, p_{n}$,即还原出的排列。可以证明答案是唯一的。
说明/提示
在第一个样例中,对于每个 $i$,没有下标 $j$ 同时满足两个条件,因此 $s_i$ 总是 $0$。
在第二个样例中,对于 $i=2$,有 $j=1$ 满足条件,所以 $s_2 = p_1$。
在第三个样例中,对于 $i=2,3,4$,只有 $j=1$ 满足条件,所以 $s_2 = s_3 = s_4 = 1$。对于 $i=5$,所有 $j=1,2,3,4$ 都满足条件,所以 $s_5 = p_1 + p_2 + p_3 + p_4 = 10$。
由 ChatGPT 4.1 翻译