#CF1945F. 基里尔与蘑菇

基里尔与蘑菇

F. 基里尔与蘑菇

单个测试点时间限制22单个测试点内存限制256256 兆字节

当营地里的所有人都睡熟后,基里尔偷偷溜出帐篷,前往智慧橡树下去采蘑菇。

已知橡树下长着 nn 个蘑菇,每个蘑菇都有魔力值 viv_i。基里尔非常想用这些蘑菇炼制一瓶强度最大的魔法药剂。

药剂的强度等于所选蘑菇的数量乘以这些蘑菇中最小的魔力值。 炼制药剂时,基里尔会依次摘下橡树下的蘑菇,可以按任意顺序采摘。

然而事情并没有那么简单。智慧橡树告诉了基里尔一个 11nn 的排列 pp。 如果基里尔一共只采摘 kk 个蘑菇,那么下标为 p1,p2,,pk1p_1,p_2,\dots,p_{k-1} 的所有蘑菇的魔力值都会变为 00。 基里尔不会使用魔力值为 00 的蘑菇来炼药。

你的任务是帮助基里尔采蘑菇,使得他能炼出强度尽可能大的药剂。 同时,基里尔不太敢在橡树旁待太久,所以在所有能达到最大强度的方案中,你需要找出使用蘑菇数量最少的那一个。

长度为 nn 的排列是指包含 11nnnn 个不同整数、按任意顺序排列的数组。 例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是(数字 22 出现了两次),[1,3,4][1,3,4] 也不是(n=3n=3 但数组中出现了 44)。

输入格式

输入包含多组测试数据。 第一行包含一个整数 tt1t1041\le t\le 10^4)—— 测试用例的数量。

每组测试用例格式如下: 第一行包含一个整数 nn1n2×1051\le n\le 2\times10^5)—— 蘑菇的数量。

第二行包含 nn 个整数 v1,v2,,vnv_1,v_2,\dots,v_n1vi1091\le v_i\le 10^9)—— 每个蘑菇的魔力值。

第三行包含一个 11nn 的排列 pp

保证所有测试用例的 nn 之和不超过 2×1052\times10^5

输出格式

对于每组测试用例,输出两个用空格隔开的整数:

  • 能炼制出的药剂的最大强度
  • 达到该强度所需的最少蘑菇数量

样例输入

6
3
9 8 14
3 2 1
5
1 2 3 4 5
1 2 3 4 5
6
1 2 3 4 5 6
6 5 4 3 2 1
5
1 4 6 10 10
2 1 4 5 3
4
2 2 5 5
4 2 3 1
5
1 2 9 10 10
1 4 2 3 5

样例输出

16 2
9 3
8 2
20 2
5 1
20 2

样例说明

在第一个样例中,需要选择下标为 1122 的蘑菇。 药剂强度为 2min(v1,v2)=2min(9,8)=28=162\cdot\min(v_1,v_2)=2\cdot\min(9,8)=2\cdot8=16。 注意:采摘两个蘑菇后,下标为 33 的蘑菇魔力值会变为 00