相邻股道闸口 j 的过闸代价 cj:当 bj<bj+1 时为 1,否则为 0。
标准冒泡从左到右扫描。原优先级序列中第 i 节车厢 ai 会与左边所有比它大的车厢交换,设这样的个数为 cnti。它每次向左最多移动一格,因此会依次经过边 i−1,i−2,…,i−cnti,贡献为这些边上 c 值之和。
预处理前缀和 prei=c1+⋯+ci,则第 i 个元素贡献为 prei−prei−cnti(0-index 下即 pre[i]−pre[i−cnt])。
问题转化为:对每个 ai 求左边有多少个数严格大于它。先离散化,再用树状数组维护已出现元素个数。对当前 ai:
铁路编组站有 n 节待整列车厢,优先级序列为 a,相邻股道闸口的固定等级序列为 b(整场过程中 b 不变)。调度规程要求必须用标准冒泡排序把 a 排成非递减:
每次实际发生交换时,代价由闸口等级决定:若 bj≥bj+1,这次交换代价为 0;若 bj<bj+1,这次交换代价为 1。请计算按上述固定过程完成后,所有实际交换的总代价。
约束:测试组数不超过 100000,单组 n 不超过 200000,所有组 n 之和不超过 500000,ai、bi 的绝对值均不超过 1000000000。
每个测试文件包含多组数据。第一行一个整数 T,表示组数。 每组第一行一个整数 n;第二行 n 个整数 a1,a2,…,an;第三行 n 个整数 b1,b2,…,bn。 保证 1≤T≤100000,1≤n≤200000,∣ai∣,∣bi∣≤1000000000,且所有组 ∑n≤500000。
对每组数据输出一行一个整数,表示该组冒泡过程中所有实际交换的代价之和。
输入
2
3
5 1 4
2 2 9
5
9 8 7 6 5
4 3 2 1 0
输出
1
0
说明
第一组 a=[5,1,4],b=[2,2,9]。冒泡过程中 1 向左经过边,其中 b1=b2 代价为 0,b2<b3 的边被经过时计 1,总代价为 1。
第二组 a 严格递减,b 严格递减,所有相邻边代价为 0,总代价为 0。
输入
1
1
0
0
输出
0
说明
n=‘1‘,无需交换,代价为 0。
输入
1
4
4 3 2 1
0 1 2 3
输出
6
说明
a 严格递减,b 严格递增,每条相邻边代价均为 1。每个逆序都会跨过对应边,总代价为 6。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册