[LSOT-2] 基于二分查找与插入的快速排序
题目背景
小 H 不会排序,但是会二分!
于是他创造了一个基于二分查找与插入的快速排序。
本题存在可带修做法,因为这题是这场考试的签到题所以良心出题人没有加上。
题目描述
给定一个排列 $p$。每次可以选择一个数 $p_i$,你需要找到最小的 $j$,使得 $j>i$ 且 $p_j>p_i$,并将 $p_i$ 插入到 $p_j$ 前面。你需要最小化使得 $p_i=i$ 的操作次数。
若不存在这样的 $j$,则无法进行操作。
输入输出格式
输入格式
第一行一个整数 $n$,表示排列的长度。
接下来一行 $n$ 个整数描述排列 $p$,第 $i$ 个数为 $p_i$。
输出格式
一行一个整数表示最小的操作次数。若无法完成排序输出 $-1$。
输入输出样例
输入样例 #1
5
3 1 4 2 5
输出样例 #1
2
说明
**「本题采用捆绑测试」**
- $\texttt{Subtask 1(20pts):}n\le10$。
- $\texttt{Subtask 2(20pts):}$保证 $p_i=n-i+1$。
- $\texttt{Subtask 3(20pts):}n\le1000$。
- $\texttt{Subtask 4(40pts):}$无特殊性质。
对于全部的数据,$1\le n\le2\times 10^6$,$p$ 是一个 $1$ 到 $n$ 的排列。