题目描述
有一个 1∼n 的排列,记为 a1,…,an。每次操作,你可以选择 1≤i<n 并交换 ai,ai+1。
你希望用最小的交换次数,使得排列中存在一个子区间,恰好为 [1,2,…,m]。记这个最小的交换次数为 f(m)。
q 次询问,每次给出 1≤m≤n,求 f(m)。不同询问互相独立。
例如,n=6,a=[2,6,1,3,4,5],m=3,一种最优操作方案如下:
- 交换 a1,a2,得 [6,2,1,3,4,5]。
- 交换 a2,a3,得 [6,1,2,3,4,5]。
此时,a[2…4]=[1,2,3],满足条件,故 f(3)=2。
输入格式
第一行两个正整数 n,q。
接下来一行 n 个正整数 a1∼an。
接下来一行 q 个正整数,分别表示每次询问的 m。
输出格式
对于每个询问的 m,输出 f(m) 的值,以空格隔开。
5 5
4 2 1 3 5
1 2 3 4 5
0 1 1 4 4
样例解释1
- 当 m=2 时:交换 a2,a3 即可出现子串 [1,2]。
- 当 m=3 时:交换 a2,a3 即可出现子串 [1,2,3]。
- 当 m=4 时:交换 a2,a3,再交换 a1,a2,再交换 a2,a3,再交换 a3,a4 即可出现子串 [1,2,3,4]。
12 10
5 3 8 10 12 4 1 7 9 11 6 2
10 4 2 3 6 7 3 12 4 9
30 11 4 10 21 21 10 33 11 26
数据规模与约定
对于 20% 的数据,n≤5,q=1。
对于 40% 的数据,n≤8。
对于另外 10% 的数据,n≤1000,q=1,m=n。
对于另外 10% 的数据,n≤2×105,q=1,m=n。
对于另外 20% 的数据,n≤100。
对于所有数据,n≤2×105,q≤n,1≤m≤n。