#L0240. 排队最少交换次数

排队最少交换次数

题目描述

NN 名学生,学号从 00N1N-1,每名学生有一个身高值。老师依次点名 MM 名学生加入队列,规则如下:

  • 每名被点到的学生先站到队列末尾(第一个入队的学生直接站好即可)。
  • 随后,队列中的所有学生需要按照身高从低到高重新排列。身高相同的同学之间顺序可以任意。

同学们通过两两交换位置来完成排序。每次操作可以选择队列中的两名同学交换位置。

例如队列中学号依次为 10,17,3,2510, 17, 3, 25,让 33 号和 1010 号交换后变为 3,17,10,253, 17, 10, 25,这就是一次交换。

请计算:在每次点名后,在已有队列的基础上,最少需要几次交换才能完成按身高排序。

输入格式

第一行一个整数 NN,表示学生总数。

第二行 NN 个空格分隔的正整数,依次表示学号 0,1,,N10, 1, \ldots, N-1 对应的身高(值不超过 21474836472147483647)。

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

接下来 MM 行,每行一个整数 xx0x<N0 \le x \lt N),表示学号为 xx 的学生加入队列。保证每名学生此前不在队列中。

输出格式

输出 MM 行,每行一个整数,表示每次点名后完成排序所需的最少交换次数。

样例

5
170 165 168 160 175
4
0
3
2
1
0

1 1 2

</p>
4
20 20 20 10
4
0
1
2
3
0

0 0 1

</p>

提示

对于所有测试点,保证 1MN20001 \le M \le N \le 2000。对于 50%50\% 的测试点,保证所有学生的身高互不相同。

难度 普及-
通过率
尝试 0
已通过 0
ID
968
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者