CF1392F Omkar and Landslide

题目描述

Omkar 正站在 Celeste 山脚下。山顶距离他 $n$ 米,他可以看到通往山顶的所有山体,因此对于所有 $1 \leq j \leq n$,他都知道距离自己 $j$ 米处的山高为 $h_j$ 米。已知对于所有满足 $1 \leq j \leq n - 1$ 的 $j$,都有 $h_j < h_{j+1}$(即高度严格递增)。 突然,发生了山体滑坡!在滑坡过程中,每过一分钟,如果 $h_j + 2 \leq h_{j+1}$,则会有一平方米的泥土从位置 $j+1$ 滑到位置 $j$,使得 $h_{j+1}$ 减少 $1$,$h_j$ 增加 $1$。这些变化是同时发生的,例如,如果对于某个 $j$,有 $h_j + 2 \leq h_{j+1}$ 且 $h_{j+1} + 2 \leq h_{j+2}$,那么 $h_j$ 会增加 $1$,$h_{j+2}$ 会减少 $1$,而 $h_{j+1}$ 同时被增加和减少 $1$,因此在这一分钟内 $h_{j+1}$ 实际上保持不变。 当不存在 $j$ 使得 $h_j + 2 \leq h_{j+1}$ 时,滑坡结束。请帮助 Omkar 计算滑坡结束后 $h_1, \dots, h_n$ 的值。可以证明,在给定的约束条件下,滑坡总会在有限时间内结束。 注意,由于输入数据量较大,建议代码使用快速输入输出。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 10^6$)。 第二行包含 $n$ 个整数 $h_1, h_2, \dots, h_n$,满足 $0 \leq h_1 < h_2 < \dots < h_n \leq 10^{12}$,表示各点的初始高度。

输出格式

输出 $n$ 个整数,第 $j$ 个整数表示滑坡结束后 $h_j$ 的值。

说明/提示

初始时,山的高度为 $2, 6, 7, 8$。 第一分钟,有 $2 + 2 \leq 6$,所以 $2$ 变为 $3$,$6$ 变为 $5$,得到 $3, 5, 7, 8$。 第二分钟,有 $3 + 2 \leq 5$ 且 $5 + 2 \leq 7$,所以 $3$ 变为 $4$,$5$ 不变,$7$ 变为 $6$,得到 $4, 5, 6, 8$。 第三分钟,有 $6 + 2 \leq 8$,所以 $6$ 变为 $7$,$8$ 变为 $7$,得到 $4, 5, 7, 7$。 第四分钟,有 $5 + 2 \leq 7$,所以 $5$ 变为 $6$,$7$ 变为 $6$,得到 $4, 6, 6, 7$。 第五分钟,有 $4 + 2 \leq 6$,所以 $4$ 变为 $5$,$6$ 变为 $5$,得到 $5, 5, 6, 7$。 第六分钟,没有可以变化的情况,滑坡结束,答案为 $5, 5, 6, 7$。 由 ChatGPT 4.1 翻译