Pagini recente » Cod sursa (job #554952) | Cod sursa (job #1126722) | Cod sursa (job #1346998) | Cod sursa (job #2991004) | Cod sursa (job #1824262)
#include <iostream>
#include <cstdio>
#include <queue>
#define MAXN 50050
using namespace std;
int n, nra, nrb;
int a[MAXN], b[MAXN];
long long ba[MAXN], bb[MAXN];
struct cmp
{
long long nr;
int proc;
cmp(long long nr = 0, int proc = 0) : nr(nr), proc(proc) { }
bool operator()(cmp x, cmp y)
{
return x.nr > y.nr;
}
};
priority_queue<cmp, vector<cmp>, cmp> q;
void read()
{
scanf("%d %d %d\n", &n, &nra, &nrb);
for (int i = 1; i <= nra; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= nrb; i++)
scanf("%d", &b[i]);
}
void solve(int src[MAXN], long long rez[MAXN], int sz)
{
while (!q.empty()) q.pop();
for (int i = 1; i <= sz; i++)
q.push(cmp(src[i], i));
for (int i = 1; i <= n; i++) {
cmp top = q.top();
q.pop();
rez[i] = top.nr;
q.push(cmp(top.nr + 1LL*src[top.proc], top.proc));
}
}
int main()
{
freopen("fabrica.in", "r", stdin);
freopen("fabrica.out", "w", stdout);
read();
solve(a, ba, nra);
solve(b, bb, nrb);
long long sol = 0;
printf("%lld ", ba[n]);
for (int i = 1; i <= n; i++)
sol = max(sol, ba[i]+ bb[n-i+1]);
printf("%lld", sol);
return 0;
}