#include #include #include #include #include using namespace std; int main() { int cases; cin >> cases; while (cases--) { int dim; cin >> dim; int sl1[1000001] = { 0 }; int sl2[1000001] = { 0 }; int mins[2] = { 0 }; vector front; for (int i = 0; i < dim; i++) { int height; cin >> height; front.push_back(height); mins[0] += height; } vector side; for (int i = 0; i < dim; i++) { int height; cin >> height; side.push_back(height); mins[1] += height; } int minimum = max(mins[0], mins[1]); int maximum = 0; sort(front.begin(), front.end()); sort(side.begin(), side.end()); int front_max = front[front.size() - 1]; int old_counter = 0; for (int i = front.size() - 1; i >= 0;) { int max = front[i]; int counter = 0; while (i >= 0 && front[i] == max) { counter++; i--; } sl1[max] = counter + old_counter; old_counter = sl1[max]; } old_counter = 0; for (int i = side.size() - 1; i >= 0;) { int max = side[i]; int counter = 0; while (i >= 0 && side[i] == max) { counter++; i--; } sl2[max] = counter + old_counter; old_counter = sl2[max]; } int s1_old = sl1[front_max]; int s2_old = sl2[front_max]; for (int i = front_max; i > 0; i--) { int a = sl1[i] == 0 ? s1_old : sl1[i]; int b = sl2[i] == 0 ? s2_old : sl2[i]; maximum += a * b; s1_old = a; s2_old = b; } cout << "Minimalni budova obsahuje " << minimum << " kostek, maximalni " << maximum << " kostek." << endl; } return 0; }