P15931 [TOPC 2021] A Sorting Problem

Description

You are given an array $[p[1], p[2], \dots, p[n]]$ where all the numbers in the array are distinct. In addition, the numbers are positive integers between 1 and $n$. You can only perform the following operations on the array: Pick two indices $x$ and $y$ such that $|p[x] - p[y]| = 1$, and then swap the values of $p[x]$ and $p[y]$. We now want to sort this array in ascending order. That is, to make $p[i] = i$ for all $i \in \{1, 2, \dots, n\}$. For example, we can sort the array $[p[1] = 2, p[2] = 3, p[3] = 1]$ in two operations: 1. Swap $p[1]$ and $p[3]$. The array becomes $[p[1] = 1, p[2] = 3, p[3] = 2]$. 2. Swap $p[2]$ and $p[3]$. The array becomes $[p[1] = 1, p[2] = 2, p[3] = 3]$ which is sorted in ascending order. Please write a program to compute the minimum number of operations to sort a given array in ascending order.

Input Format

The input contain two lines. The first line contains one integer $n$. The second lines contain $n$ space-separated numbers $p[1], p[2], \dots, p[n]$ representing the array $[p[1], p[2], \dots, p[n]]$

Output Format

Output only one number that denotes the minimum number of operations required to sort the given array.

Explanation/Hint

- $1 < n \leq 200000$. - $1 \leq p[i] \leq n$. - All $p[i]$ are distinct.