问题 5041 --序列旋转

5041: 序列旋转

题目描述

  给定一个长度为 $n$ 的序列 $s$,定义其权值为:
$$f(s)=\sum_{i=1}^n |s_i-i|$$
你可以使用旋转操作来使序列发生变化,一次旋转操作可以使序列中的所有元素前移一位,并使 $s_1$ 移动到 $s_n$。具体来说,你可以使用一次旋转操作将 $s$ 变为 $s'$:
$$
\begin{cases}
s'_i=s_{i+1} \  i \in [1,n-1] \\
s'_i=s_1 \  i=n
\end{cases}
$$

你可以进行任意次旋转操作,请你求出操作后的序列权值的最小值。

输入

第一行一个整数 $n$,表示序列的长度。
第二行 $n$ 个整数 $s_1,s_2,\dots,s_n$,表示这个序列。

输出

输出一行一个整数,代表最小的权值。

样例输入输出

输入#1 复制
3
2 3 1
输出#1 复制
0
输入#2 复制
6
4 2 2 4 2 5
输出#2 复制
6

提示

对于 $30\%$ 的数据,$ n \leq 10^3$;
对于 $70\%$ 的数据,$ n \leq 10^5$;
对于 $100\%$ 的数据:$1\leq n \leq 2\times 10^6$ , $1 \leq s_i \leq n$。

序号 标题 作者 发表时间 费用 订购数 操作