整队就餐
时间限制:1秒 内存限制:256M
【问题描述】
军训期间,H老师每天最重要的工作就是将他的 \(N\) 名学生按顺序排队就餐,为方便起见把每个学生编号为:\(1..N\)。
当前,这些学生以 \(P_1,P_2,P_3,…,P_N\) 的顺序从前到后排成一列,H老师和最前面的学生 \(P_1\) 面对面站着。他想要重新排列这些学生,使得她们的顺序变为 \(1,2,3,…,N\),学生 \(1\) 在队列的最前面,且站在H老师的对面。
经过训练的学生们都有些困倦,所以任何时刻都只有直接面向H老师的学生会注意听H老师的指令(即队列最前面的学生),每一次他可以命令这名学生沿着队伍向后移动 \(k\) 步,\(k\) 可以是范围 \(1..N-1\) 中的任意数。她经过的 \(k\) 名学生会向前移动,腾出空间使得她能够插入到队伍中这些学生之后的位置。
例如,假设 \(N=4\),学生们开始时是这样的顺序:4, 3, 2, 1,其中学生4是队列最前面的学生,与H老师面对面站着,因此现在学生4是唯一注意听老师指令的人,当H老师命令她向队伍后移动2步之后,队伍的顺序会变成:3, 2, 4, 1;现在唯一注意H老师指令的学生是学生3,所以第二次他可以给学生3下命令,如此进行直到学生们排好了顺序。
H老师急欲完成排序,请帮助他求出将学生们排好顺序所需要的最小操作次数。
【输入格式】
输入的第一行包含 \(N\)。
第二行包含 \(N\) 个空格分隔的整数: \(P_1,P_2,P_3,…,P_N\),表示学生们的起始顺序。
【输出格式】
输出一个整数,为H老师采用最佳策略可以将这 \(N\) 名学生排好顺序所需要的操作次数。
【输入输出样例1】
Input
4
1 2 4 3
Output
3
【数据限制】
\(100\%\) 的数据满足:\(1≤N≤100\) 。
【来源】
Mr.he