Pagini recente » Cod sursa (job #2608421) | Cod sursa (job #1211326) | Cod sursa (job #1934354) | Cod sursa (job #1420648) | Cod sursa (job #586761)
Cod sursa(job #586761)
#include <cstdio>
#include <queue>
#include <algorithm>
#define MAXN 100005
using namespace std;
int A[MAXN], B[MAXN], N, nrA, nrB;
struct Point {
int x, y;
bool operator < (const Point &o) const {
return x + A[y] > o.x + A[o.y];
}
};
struct Point2 {
int x, y;
bool operator < (const Point2 &o) const {
return x > o.x;
}
};
priority_queue <Point> Q1;
priority_queue <Point2> Q2;
Point nod; Point2 nod2;
int mx, i, T[MAXN], add;
int main ()
{
freopen ("fabrica.in", "r", stdin);
freopen ("fabrica.out", "w", stdout);
scanf ("%d %d %d\n", &N, &nrA, &nrB);
for (i = 1; i <= nrA; i++) {
scanf ("%d\n", &A[i]);
nod.x = 0; nod.y = i;
Q1.push (nod);
}
for (i = 1; i <= nrB; i++) {
scanf ("%d\n", &B[i]);
nod2.x = B[i];
nod2.y = i;
Q2.push (nod2);
}
for (i = 1; i <= N; i++) {
nod = Q1.top ();
Q1.pop ();
nod.x += A[nod.y];
mx = nod.x;
T[i] = nod.x;
Q1.push (nod);
}
sort (T + 1, T + N + 1);
int mx = 0;
for (i = N; i >= 1; i--) {
Point2 X = Q2.top ();
Q2.pop ();
mx = max (X.x + T[i], mx);
X.x += B[X.y];
Q2.push (X);
}
printf ("%d %d\n", T[N], mx);
return 0;
}