Pagini recente » Cod sursa (job #368492) | Cod sursa (job #715167) | Cod sursa (job #618169) | Cod sursa (job #1056362) | Cod sursa (job #1745524)
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
ifstream cin("fabrica.in");
ofstream cout("fabrica.out");
const int MAXN = 50000;
int a[1 + MAXN], b[1 + MAXN], aTime[1 + 2 * MAXN], bTime[1 + 2 * MAXN];
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > >Heap;
int main() {
int n, na, nb;
cin >> n >> na >> nb;
for (int i = 1; i <= na; i++)
cin >> a[i];
for (int i = 1; i <= nb; i++)
cin >> b[i];
for (int i = 1; i <= na; i++)
Heap.push(make_pair(a[i], i));
for (int i = 1; i <= n; i++) {
aTime[i] = Heap.top().first;
Heap.push(make_pair(aTime[i] + a[Heap.top().second], Heap.top().second));
Heap.pop();
}
cout << aTime[n] << " ";
while (!Heap.empty())
Heap.pop();
for (int i = 1; i <= nb; i++)
Heap.push(make_pair(b[i], i));
for (int i = 1; i <= n; i++) {
bTime[i] = Heap.top().first;
Heap.push(make_pair(bTime[i] + b[Heap.top().second], Heap.top().second));
Heap.pop();
}
int answer = 0;
for (int i = 1; i <= n; i++)
answer = max(answer, aTime[i] + bTime[n - i + 1]);
cout << answer << "\n";
return 0;
}