分析:由于小顶堆的性质,key值最大的结点一定在叶子结点(可以直接拿取 ),所以直接排个序,两个人贪心每次取最大的就可以了。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1e6 + 5;
int h[maxn];
int main() {
int T;
scanf("%d", &T);
int n;
long long s, e;
while (T--) {
s = 0;
e = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &h[i]);
}
sort(h, h + n);
int turn = 1;
for (int i = n - 1; i >= 0; i--) {
if (turn)
s += h[i];
else
e += h[i];
turn = !turn;
}
printf("%lld %lld\n", s, e);
}
return 0;
}