Unity
时间限制: 1 秒
内存限制: 256 MB
输入: 标准输入
输出: 标准输出
题目描述
Unity 和总统 Curtis 共同控制了弗吉尼亚州的所有居民。然而现在冲突已经解决,所有人的控制权都转移到了 Unity 手中,需要释放所有居民,让他们恢复行动自由。
弗吉尼亚州共有 $n$ 个居民,编号从 $1$ 到 $n$。为了安全地恢复所有居民的行动自由,必须严格按照顺序释放他们:先释放第 $1$ 个,然后第 $2$ 个,依此类推,最后释放第 $n$ 个。
起初 Unity 控制着所有人,但她不能随意释放任何人。被 Unity 控制的人排成一个序列 $a_i$。每次操作可以执行以下三种之一:
- 将 Unity 控制的最后一个(即数组 $a$ 中最后位置)人移交给总统(并将该人放到数组 $b$ 的末尾,$b$ 初始为空);
- 或者对称地,将总统控制(即数组 $b$ 中)的最后一个人交还给 Unity,并将其放到数组 $a$ 的末尾;
- 或者释放数组 $a$ 或数组 $b$ 中的最后一个人。
换句话说,$a$ 和 $b$ 相当于两个栈,每次操作可以将一个栈顶的人转移到另一个栈顶,或者释放某个栈顶的人。问最少需要多少次操作才能按照从 $1$ 到 $n$ 的顺序释放所有人?
输入格式
第一行一个整数 $n$,表示 Unity 控制的居民数量($1 \le n \le 2 \cdot 10^5$)。
第二行包含 $n$ 个不同的整数 $a_i$,表示 Unity 栈中人的编号序列($1 \le a_i \le n$)。
输出格式
输出一个整数,表示释放所有居民所需的最少操作次数。
样例
样例 1
输入:
4
1 2 3 4
输出:
7
样例 2
输入:
5
3 5 4 2 1
输出:
8
```
