时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
给定两个长度为

的排列

,

,以及一个正整数

。
你可以对排列

进行以下操作:
选择一个元素

,然后将该元素

挪动到排列的任意一个位置(可以是开头或者末尾)。
例如:

,我可以选定元素

,然后将

挪到开头,使得排列变成

,该行为算作一次操作。
接下来会进行

次询问,每次询问为:
给定一个正整数

(保证

不超过

),请问,在元素

不可被选取的情况下,将排列

变成排列

需要的最小操作次数是多少?
注:①排列:一个长度为

的数列,当且仅当对于所有的

~

,在数列中出现且仅出现一次。
②:子序列:在原来的数列中,随意删去若干个位置上(可能一个都不删)的元素,所剩下的数列。
输入描述:
第一行,一个正整数
。
第二行,
个正整数,表示排列
,并且
~
的每个数都会出现且仅出现一次。
第三行,
个正整数,表示排列
,并且
~
的每个数都会出现且仅出现一次。
第四行,一个正整数
,代表询问的个数。
接下来
行,每行一个整数
,代表不可被选中的元素。
输出描述:
输出
行,每行一个整数,第
行的整数代表第
个询问对应的答案。
示例3
输入
复制
5
1 2 3 4 5
2 3 4 1 5
3
1
2
5