C. 重排区间
每个测试的时间限制:1 秒
内存限制:256 兆字节
你拥有 n 个区间 [l1,r1],[l2,r2],…,[ln,rn],满足对每个 i 都有 li<ri,且所有区间的端点互不相同。
第 i 个区间的单位长度权重为 ci。因此,第 i 个区间的总权重为 ci⋅(ri−li)。
你不喜欢大的权重值,所以希望让所有区间的权重总和尽可能小。你可以执行以下三种操作:
- 将数组 l 中的元素按任意顺序重新排列;
- 将数组 r 中的元素按任意顺序重新排列;
- 将数组 c 中的元素按任意顺序重新排列。
但执行完所有操作后,每个区间必须仍然是合法的(即对每个 i,必须满足 li<ri)。
问:经过操作后,所有区间权重总和的最小可能值是多少?
输入格式
每个测试包含多个测试用例。第一行包含整数 t(1≤t≤104)——测试用例的数量。接下来是每个测试用例的描述:
- 每个测试用例的第一行是一个整数 n(1≤n≤105)——区间的数量。
- 第二行包含 n 个整数 l1,l2,…,ln(1≤li≤2⋅105)——初始区间的左端点。
- 第三行包含 n 个整数 r1,r2,…,rn(li<ri≤2⋅105)——初始区间的右端点。
- 保证 {l1,l2,…,ln,r1,r2,…,rn} 中所有数互不相同。
- 第四行包含 n 个整数 c1,c2,…,cn(1≤ci≤107)——每个区间单位长度的初始权重。
所有测试用例的 n 总和不超过 105。
输出格式
对于每个测试用例,输出一个整数:经过操作后可能的最小权重总和。
样例输入
2
2
8 3
12 23
100 100
4
20 1 2 5
30 4 3 10
2 3 2 3
样例输出
2400
42
样例解释
第一个测试用例:
可以构造
l=[8,3],
r=[23,12],
c=[100,100]。
得到两个区间:
[8,23],单位权重 100,总权重 100⋅(23−8)=1500;
[3,12],单位权重 100,总权重 100⋅(12−3)=900。
总和为 2400。可以证明不存在总和小于 2400 的方案。
第二个测试用例:
可以构造
l=[1,2,5,20],
r=[3,4,10,30],
c=[3,3,2,2]。
得到四个区间:
[1,3],单位权重 3,总权重 3⋅(3−1)=6;
[2,4],单位权重 3,总权重 3⋅(4−2)=6;
[5,10],单位权重 2,总权重 2⋅(10−5)=10;
[20,30],单位权重 2,总权重 2⋅(30−20)=20。
总和为 42。可以证明不存在总和小于 42 的方案。