2961. 排序
时间限制:1000 MS 内存限制:128 MB
题目描述
## 题目描述 学过排序后的喵喵也突发奇想,想到了一种对数组排序的方法,喵喵对数组排序只有两种操作: - 从数组中挑选一个元素,然后讲其移至数组的尾部 - 从数组中挑选一个元素,然后将其移至数组的头部 例如对于一个包含 $n$ 个元素的数组: $a1,a2,⋯,ai-1,ai,ai+1,⋯,an$ - 如果应用了第一个操作,数组会变成: $a1,a2,⋯,ai-1,ai+1,⋯,an,ai$ - 如果应用了第二个操作,数组会变成: $ai,a1,a2,⋯,ai-1,ai+1,⋯,an$ 事实证明,用这两个操作一定可以在有限次内将数组从小到大排列。 现在给出一个数组,喵喵想知道最少操作几次才能将数组从小到大排列。 ## 输入格式 第一行输入一个正整数 $n$,代表数组中元素的个数 第二行给出 $n$ 个正整数 $ai$,代表数组中的元素 ## 输出格式 在一行中输出将数组从小到大排序所需的最小次数 ## 输入 ```in1 5 3 1 2 4 5 ``` ## 输出 ```out1 2 ``` ```in2 5 5 4 3 2 1 ``` ```out2 4 ``` ```in3 6 2 3 1 6 4 5 ``` ```out3 2 ``` ## 提示 **样例解释1:** 第一步将$2$移到开头,第二步将$1$移到开头 **样例解释2:** 可以让$5$不动,然后将$4,3,2,1$依次移到开头 也可以让$1$不动,然后将$2,3,4,5$依次移到末尾 操作次数都是$4$次 **样例解释3:** 第一步将1移动到开头,第二步将6移动到末尾,操作次序可以交换 ## 数据范围 - 子任务 $1$ 有 $10$分,满足 $n\le10$ - 子任务 $2$ 有 $10$ 分,满足$n\le300$ 且 $ai$ 互不相同 - 子任务 $3$ 有 $15$ 分,满足 $n\le5000$ 且 $ai$ 互不相同 - 子任务 $4$ 有 $20$ 分,满足 $ai$ 互不相同 - 子任务 $5$ 有 $10$ 分,满足 $n\le300$ - 子任务 $6$ 有 $15$ 分,满足 $n\le5000$ - 子任务 $7$ 有 $20$分,无特殊性质 对所有的测试数据都满足 $1\len\le3\cdot10^5,1\leai\le10^9$