2743 - 积木排队

题目描述

A 又在摆弄他的积木啦。

他有 N 块积木,积木的高度恰好是 1 \sim N,他把积木打乱后排成了一条直线。

Z 是小 A 编程班的同学,他看着这些积木,想起了今天做的编程题中的一个问题,于是他把这个问题讲给小 A 听,一起讨论这个问题的做法。

Z 说,我们指定如下的排序规则,要求必须在满足规则的情况下操作,最终让积木从矮到高排好队。

  1. 可以将积木划分成若干个高度连续单调递减的子序列。

  2. 每次可以将某个至少由 2 块积木组成的高度连续单调递减的子序列翻转(如:6 5 3 1,翻转为 1 3 5 6)。

重复上述操作,直到所有的积木都按照高度从矮到高排好队。

求:最少需要进行多少次翻转操作。

A 和小 Z 开始了紧张的探讨,请你编程帮助小 A 和小 Z 计算出答案,方便他们验证自己探讨的结果。

输入

第一行有一个正整数 N

第二行包含 N 个互不相同的的正整数,代表每块积木的高度,这些数一定是由 1 \sim N 组成。

测试数据保证:首次将积木划分成若干个高度连续单调递减的子序列,此时满足题意的每个子序列的长度都是偶数。

输出

输出一个整数,代表需要翻转的最少次数。

样例

输入

6
2 1 6 5 4 3

输出

2

输入

4
3 1 4 2

输出

3

输入

10
6 5 10 9 8 7 2 1 4 3

输出

19
说明

样例 1 解释

将子序列 [2,1][6,5,4,3] 分别翻转,即有序,因此只需要翻转 2 次。

样例 2 解释

第一轮将子序列 [3,1][4,2] 分别翻转,翻转次数为 2

第二轮将子序列 [3,2] 翻转,即有序。

因此一共需要翻转 2+1=3 次。

数据范围

对于 20\% 的数据,2 \le N \le 500

对于 40\% 的数据,2 \le N \le 3000

对于 100\% 的数据,2 \le N \le 10^5

标签
题目参数
时间限制 1 秒
内存限制 512 MB
提交次数 0
通过人数 0
金币数量 1 枚
难度 提高


上一题 下一题