Pagini recente » Cod sursa (job #671352) | Cod sursa (job #3198374) | Cod sursa (job #2684336) | Cod sursa (job #656803) | Cod sursa (job #1204226)
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
struct comp {
bool operator()(const pair<int, int> &a, const pair<int, int> &b) const {
return a.first > b.first;
}
};
void Solve(vector<int> &Times, const vector<int> &Values)
{
priority_queue< pair<int, int>, vector< pair<int, int> >, comp> H;
for (int i = 0; i < int(Values.size()); i++)
H.push(make_pair(Values[i], Values[i]));
for (int i = 0; i < int(Times.size()); i++)
{
const int time = H.top().first, add = H.top().second;
H.pop();
Times[i] = time;
H.push(make_pair(time + add, add));
}
}
int main()
{
freopen("fabrica.in", "r", stdin);
freopen("fabrica.out", "w", stdout);
int N, NrA, NrB;
scanf("%d%d%d", &N, &NrA, &NrB);
vector<int> ValuesA(NrA);
for (int i = 0; i < NrA; i++) scanf("%d", &ValuesA[i]);
vector<int> TimesA(N);
Solve(TimesA, ValuesA);
int Ans = 0;
for (int i = 0; i < N; i++)
Ans = max(Ans, TimesA[i]);
printf("%d ", Ans);
vector<int> ValuesB(NrB);
for (int i = 0; i < NrB; i++) scanf("%d", &ValuesB[i]);
vector<int> TimesB(N);
Solve(TimesB, ValuesB);
for (int i = 0; i < N; i++)
Ans = max(Ans, TimesA[i] + TimesB[N - i - 1]);
printf("%d\n", Ans);
}