Pagini recente » Borderou de evaluare (job #2682635) | Borderou de evaluare (job #1045925) | Borderou de evaluare (job #1293190) | Borderou de evaluare (job #1023508) | Cod sursa (job #585452)
Cod sursa(job #585452)
#include <stdio.h>
#include <algorithm>
#include <queue>
using namespace std;
#define NMAX 100002
int N, cntA, cntB;
priority_queue< pair<int, int>, vector< pair<int, int> >,
greater< pair<int, int> > > Q;
int A[NMAX], B[NMAX];
int A1[NMAX], B1[NMAX];
void makeProcList(int V[], int V1[], int L) {
while (Q.size()) {
Q.pop();
}
for (int i = 1; i <= L; i++) {
Q.push(make_pair(V[i], V[i]));
}
for (int i = 1; i <= N; i++) {
pair<int, int> top;
top = Q.top();
Q.pop();
V1[i] = top.first;
top.first += top.second;
Q.push(top);
}
}
int main() {
freopen("fabrica.in", "r", stdin);
freopen("fabrica.out", "w", stdout);
scanf("%d %d %d\n", &N, &cntA, &cntB);
for (int i = 1; i <= cntA; i++) {
scanf("%d ", &A[i]);
}
for (int i = 1; i <= cntB; i++) {
scanf("%d ", &B[i]);
}
makeProcList(A, A1, cntA);
makeProcList(B, B1, cntB);
int ret1 = 0, ret2 = 0;
for (int i = 1; i <= N; i++) {
ret1 = max(ret1, A1[i]);
ret2 = max(ret2, A1[i] + B1[N - i + 1]);
}
printf("%d %d\n", ret1, ret2);
return 0;
}