题库练习 小杨的队列

A71541 | 小杨的队列

来源编程题
时间限制1s
内存限制128MB
通过 / 提交0/0

题目描述

小杨的班级里共有 N 名同学,学号从 0 至 N - 1。

某节课上,老师要求同学们进行列队。具体来说,老师会依次点名 M 名同学,让他们加入队伍。每名新入队的同学需要先站到队伍末尾(刚开始队伍里一个人都没有,所以第一个入队的同学只需要站好即可),随后,整个队伍中的所有同学需要按身高从低到高重新排序(身高相同的同学之间的顺序任意)。

排队很容易,但重新排序难倒了同学们。稍加讨论后,他们发现可以通过交换位置的方法来实现排序。具体来说,他们可以让队伍中的两名同学交换位置,这样整个队伍的顺序就会发生变化,多经过这样的几次交换后,队伍的顺序就可以排好。

例如:队伍中有 4 名同学,学号依次为 10, 17, 3, 25,我们可以令 3 号同学和 10 号同学交换位置,则交换后的队伍顺序变为 3, 17, 10, 25,这就是一次交换位置。

聪明的小杨想要知道:在老师每次点名一位新同学加入队伍后,在原有队伍的基础上,同学们最少要进行几次交换位置,才能完成老师按身高排序的要求。

输入格式

第一行一个整数 N,表示同学的数量。

第二行 N 个用空格隔开的正整数,依次表示学号为 0, 1, …, N-1 的同学的身高(不超过 2,147,483,647)。

第三行一个整数 M,表示老师点名的数量。

接下来 M 行,依次描述 M 次点名:每行一个整数 x0 ≤ x < N),表示要求学号为 x 的同学加入队伍。保证该名同学此前不在队伍中。

输出格式

输出 M 行,依次表示对于每次点名,同学们最少要进行几次交换位置,才能完成按身高排序的要求。

输入输出样例

输入 #1
5
170 165 168 160 175
4
0
3
2
1
输出 #1
0
1
1
2
输入 #2
4
20 20 20 10
4
0
1
2
3
输出 #2
0
0
0
1
C++ 编辑器
输入
输出