解题思路
设相邻位置 j 的交换代价为 cj:
当 bj<bj+1 时,cj=1;否则 cj=0。
题目中的冒泡排序是从左到右扫描。对于原数组中第 i 个元素 ai,只考虑它左边比它大的元素数量,记为 cnti。这些元素都会在冒泡排序过程中与 ai 发生交换。
关键性质:
题目内容
游游有两个长度同为 n 的整数数组 a 和 b。她会对数组 a 执行标准冒泡排序来将其排成非递减序列(数组 b 始终不变):
- 对于 i=1,2,…,n−1,依次执行一趟扫描;
- 在第 i 趟中,按顺序检查 j=1,2,…,n−i;
- 若当前aj>aj+1,则交换这两个元素;否则不交换。
每次实际发生交换时,其代价由当前位置对应的固定值 bj,bj+1 决定:
- 若 bj≥bj+1,则这次交换代价为 0;
- 若 bj<bj+1,则这次交换代价为 1。
请你计算,按照上述固定的冒泡排序过程把数组 a 排成非递减后,所有交换操作的总代价。
输入描述
每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤T≤105)代表数据组数。每组测试数据描述如下:
- 第一行输入一个整数 n(1≤n≤2×105)。
- 第二行输入 n 个整数a1,a2,…,an(∣ai∣≤109)。
- 第三行输入 n 个整数 b1,b2,…,bn(∣bi∣≤109)。
保证单个测试文件中所有测试数据的n之和不超过 5×105。
输出描述
对于每组测试数据,输出一行一个整数,表示按题目所述的固定冒泡排序过程将数组 a 排成非递减序列时,所有实际发生交换的总代价之和。。
样例1
输入
2
4
2 1 2 1
3 1 2 2
6
17 15 12 10 18 3
1 5 1 3 1 2
输出
1
7
说明
第一组数据中,按标准冒泡排序过程,恰好只会发生一次代价为 1 的交换,因此答案为 1。
第二组数据中,按照固定的冒泡排序顺序累计交换代价为7,因此答案为7。