#R2024A0504. Rotate

Rotate

Rotate

题目背景

c++c++ 中有一个函数叫 rotaterotate ,内容如下:

rotate(first,middle,last)rotate(\,first,\,middle,\,last\,)

功能是将一个序列中的 [first,middle)[\, first,\quad middle\,)[middle,last)[\, middle,\quad last\, ) 部分互换。

例如对于序列

v[]={12345}v[\,\,\,]= \{ 1\, 2\, 3\, 4\, 5 \} ,进行操作 rotate(v,v+2,v+5)rotate(\, v,\, v+2,\, v+5) ,会得到:v[]={34512}v[\,\,\,]= \{ 3\, 4\, 5\, 1\, 2 \}

题目内容

现给定一个由 1n 1 \sim n 组成的序列,请问最少需要多少次 rotaterotate 操作才能将给定序列转换为 {1,2,3,n} \{ 1,2,3,……,n\}

输入格式

第一行一个整数 nn ,表示序列长度。

第二行 n n 个整数,表示给定序列。

输出格式

一个整数,表示需要的最少操作数。

测试样例

输入
8
8 1 3 5 2 6 4 7
输出
3

数据范围

1<n2e61<n\leq 2e6