题意简述
给定长度为 $2^n$ 的排列,下标和数值从 $0$ 开始,你可以进行两种操作:
- 对于 $i\in[0,2^{n-1}-1]$,执行 $\text{swap}(p_i,p_{i+2^{n-1}})$。
- 建立排列 $q$,使得对于 $i\in[0,2^{n-1}-1]$,$q_i=p_{2i},q_{i+2^{n-1}}=p_{2i+1}$。随后,令 $p\gets q$。
举例来说,对于排列 $\{0,1,2,3,4,5,6,7\}$,若执行第一种操作,排列变为 $\{4,5,6,7,0,1,2,3\}$;若执行第二种操作,排列变为 $\{0,2,4,6,1,3,5,7\}$。
你可以任意执行操作一和操作二,执行完操作之后,你需要最小化排列的逆序对数。
输入格式
本题有多组测试数据。
第一行输入两个整数 $sid,T$,表示测试点编号和数据组数。样例中 $sid = 0$。
对于每组测试数据:
第一行输入一个整数 $n$,表示排列的长度为 $2^n$。
第二行输入 $2^n$ 个整数,第 $i$ 个整数为 $p_{i-1}$。
输出格式
对于每组测试数据,输出一个整数,表示操作之后的最小逆序对数。
样例输入 1
0 2
2
0 3 1 2
3
2 3 7 6 1 4 5 0
样例输出 1
1
8
对于第一组数据,最优的方案为执行一次操作二,此时排列变为 $\{0,1,3,2\}$,逆序对数为 $1$。
对于第二组数据,最优的方案为执行一次操作一,此时排列变为 $\{1,4,5,0,2,3,7,6\}$,逆序对数为 $8$。
样例输入 / 输出 2
见选手目录下的 ex_perm2.in / ex_perm2.ans。
该样例满足测试点 $1$ 的限制。
样例输入 / 输出 3
见选手目录下的 ex_perm3.in / ex_perm3.ans。
该样例满足测试点 $2\sim 3$ 的限制。
样例输入 / 输出 4
见选手目录下的 ex_perm4.in / ex_perm4.ans。
该样例满足测试点 $4\sim 6$ 的限制。
样例输入 / 输出 5
见选手目录下的 ex_perm5.in / ex_perm5.ans。
该样例满足测试点 $7\sim 10$ 的限制。
数据范围与约定
测试点编号 | $n=$ |
---|---|
$1$ | $3$ |
$2 \sim 3$ | $7$ |
$4\sim 6$ | $11$ |
$7\sim 10$ | $17$ |
对于所有数据,保证 $1 \le n \le 17,1 \le T \le 5$,$p$ 为 $0\sim 2^n-1$ 的排列。