#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define FOR(i,a) for(int i=0; i left(k), right(k); for (int i = 0; i < k; ++i) scanf("%lld", &left[i]); // left[i] = 100000; for (int i = 0; i < k; ++i) scanf("%lld", &right[i]); // right[i] = 100000; int64 minn = 0, maxx = 0; for (int i = 0; i < k; ++i) { for (int j = 0; j < k; ++j) maxx += min(left[i], right[j]); } // sort(ALL(left), greater()); // sort(ALL(right), greater()); map m, m2, mres; m.clear(); m2.clear(); mres.clear(); for (int i = 0; i < k; ++i) ++m[left[i]]; for (int i = 0; i < k; ++i) ++m2[right[i]]; for (map::iterator itr = m.begin(); itr != m.end(); ++itr) mres[itr->first] = itr->second; for (map::iterator itr = m2.begin(); itr != m2.end(); ++itr) mres[itr->first] = max(itr->second, mres[itr->first]); for (map::iterator itr = mres.begin(); itr != mres.end(); ++itr) minn += itr->second * itr->first; /* int idr = 0; for(int i=0; i=k) { minn += left[i]; } while( idr left[i+1]) ) ) { minn += right[idr]; idr++; } } */ // for (int i = 0; i < k; ++i) // minn += max(left[i], right[i]); printf("Minimalni budova obsahuje %lld kostek, maximalni %lld kostek.\n", minn, maxx); //printf("-> %lld\n", max(accumulate(ALL(left), 0LL), accumulate(ALL(right), 0LL))); } return 0; }