P5797 [SEERC 2019] Max or Min
题目描述
Kevin 有 $n$ 个整数 $a_1, a_2, \dots, a_n$ ,它们按**环形**排列。对于环上的数字,数字 $a_i$ 和 $a_{i+1} \ (1 \leq i < n)$ 是相邻的,且数字 $a_1$ 和 $a_n$ 是相邻的。因此,每个数字有恰好两个相邻的数字。
在 $1$ 分钟内,Kevin 可以将 $a_i$ 修改为这 $3$ 个数字中的最小值或最大值:$a_i$ 以及它的两个相邻数字。例如,如果 $a_i=5$ 且 $a_i$ 的两个相邻数字为 $3$ 和 $2$,Kevin 修改 $a_i$ 为最小值后,$a_i$ 会变为 $2$;如果 Kevin 修改 $a_i$ 为最大值,$a_i$ 仍是 $5$。
对于从 $1$ 到 $m$ 的每个整数 $x$,计算出让上述环上的数字都变为 $x$ 的最短时间。
输入格式
第一行包含两个整数 $n$ 和 $m \ (3 \leq n \leq 2 \cdot 10^5, 1 \leq m \leq 2 \cdot 10^5)$,代表环上的数字个数和需要计算答案的 $x$ 的范围。
第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n \ (1 \leq a_i \leq m)$,代表环上的数字。
输出格式
输出 $m$ 个整数。第 $i$ 个整数为将环上的所有数字变为 $i$ 的最短时间的分钟数,如果无论如何都无法将环上的所有整数变为 $i$,则第 $i$ 个整数应输出 $-1$。
说明/提示
要让环上的所有整数都变为 $2$,Kevin 需要至少 $5$ 分钟。一种可行的修改方案为:
1. 将 $a_6$ 修改为它与相邻数字中的最小值,即修改为 $2$;
2. 将 $a_4$ 修改为它与相邻数字中的最大值,即修改为 $2$;
3. 将 $a_3$ 修改为它与相邻数字中的最大值,即修改为 $5$;
4. 将 $a_2$ 修改为它与相邻数字中的最小值,即修改为 $2$;
5. 将 $a_3$ 修改为它与相邻数字中的最小值,即修改为 $2$。