// CTEAM039 // // CTEAM039 // // CTEAM039 // // CTEAM039 // #include #include int main (void) { int n; scanf ("%d", &n); for (int prob = 0; prob < n; prob++) { int k; scanf ("%d", &k); int frontCount [100000]; int rightCount [100000]; int rightTotal [100000]; for (int i = 0; i < 100000; i++) { frontCount [i] = 0; rightCount [i] = 0; } for (int i = 0; i < k; i++) { int input; scanf ("%d", &input); frontCount [input-1] ++; } for (int i = 0; i < k; i++) { int input; scanf ("%d", &input); rightCount [input-1] ++; } int totalMin = 0; for (int i = 0; i < 100000; i++) { if (frontCount [i] > rightCount [i]) totalMin += frontCount [i] * (i+1); else if (rightCount [i] > frontCount [i]) totalMin += rightCount [i] * (i+1); else if (rightCount > 0) totalMin += rightCount [i] * (i+1); } int totalMax = 0; int tmp = 0; for (int i = 99999; i >= 0; i--) { tmp += rightCount [i]; rightTotal [i] = tmp; } tmp = 0; for (int i = 0; i < 100000; i++) { if (rightCount [i] > 0) { tmp += rightTotal [i]; rightTotal [i] = tmp; } } for (int i = 0; i < 100000; i++) { totalMax += frontCount [i] * rightTotal [i]; } printf ("Minimalni budova obsahuje %d kostek, maximalni %d kostek.\n", totalMin, totalMax); } return 0; }