#H1011. 交换次数

交换次数

题目描述

有一个 1n1\sim n 的排列,记为 a1,,ana_1,\dots,a_n。每次操作,你可以选择 1i<n1\le i<n 并交换 ai,ai+1a_i,a_{i+1}

你希望用最小的交换次数,使得排列中存在一个子区间,恰好为 [1,2,,m][1,2,\dots,m]。记这个最小的交换次数为 f(m)f(m)

qq 次询问,每次给出 1mn1\le m\le n,求 f(m)f(m)。不同询问互相独立。

例如,n=6,a=[2,6,1,3,4,5],m=3n=6,a=[2,6,1,3,4,5],m=3,一种最优操作方案如下:

  • 交换 a1,a2a_1,a_2,得 [6,2,1,3,4,5][6,2,1,3,4,5]
  • 交换 a2,a3a_2,a_3,得 [6,1,2,3,4,5][6,1,2,3,4,5]

此时,a[24]=[1,2,3]a[2\dots 4]=[1,2,3],满足条件,故 f(3)=2f(3)=2

输入格式

第一行两个正整数 n,qn,q

接下来一行 nn 个正整数 a1ana_1\sim a_n

接下来一行 qq 个正整数,分别表示每次询问的 mm

输出格式

对于每个询问的 mm,输出 f(m)f(m) 的值,以空格隔开。

5 5
4 2 1 3 5
1 2 3 4 5
0 1 1 4 4

样例解释1

  1. m=2m=2 时:交换 a2,a3a_2,a_3 即可出现子串 [1,2][1,2]
  2. m=3m=3 时:交换 a2,a3a_2,a_3 即可出现子串 [1,2,3][1,2,3]
  3. m=4m=4 时:交换 a2,a3a_2,a_3,再交换 a1,a2a_1,a_2,再交换 a2,a3a_2,a_3,再交换 a3,a4a_3,a_4 即可出现子串 [1,2,3,4][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%20\% 的数据,n5,q=1n\le 5,q=1

对于 40%40\% 的数据,n8n\le 8

对于另外 10%10\% 的数据,n1000,q=1,m=nn\le 1000,q=1,m=n

对于另外 10%10\% 的数据,n2×105,q=1,m=nn\le 2\times 10^5,q=1,m=n

对于另外 20%20\% 的数据,n100n\le 100

对于所有数据,n2×105,qn,1mnn\le 2\times 10^5,q\le n,1\le m\le n