Pagini recente » Cod sursa (job #2086049) | Cod sursa (job #3270080) | Cod sursa (job #586082)
Cod sursa(job #586082)
#include <algorithm>
#include <stdio.h>
#include <set>
#define MAX 100010
#define mp make_pair
#define f first
#define s second
using namespace std;
int n, nra, nrb, dur;
multiset <int> setDur;
multiset <pair <int, int> > setMom, setDis;
int vctIn[MAX];
int main()
{
freopen("fabrica.in", "r", stdin);
freopen("fabrica.out", "w", stdout);
scanf("%d %d %d", &n, &nra, &nrb);
for (int i = 1; i <= nra; i++)
{
scanf("%d", &dur);
setMom.insert(mp(0, dur));
}
for (int i = 1; i <= nrb; i++)
{
scanf("%d", &dur);
setDur.insert(dur);
}
for (; vctIn[0] < n; )
{
int mom = setMom.begin()->f;
int t = setMom.begin()->s;
setMom.erase(setMom.begin());
if (mom != 0)
vctIn[++vctIn[0]] = mom;
setMom.insert(mp(mom + dur, dur));
}
int m1 = vctIn[n], m2 = 0;
for (int i = n; i; i--)
{
for (; setDis.begin() != setDis.end(); setDis.erase(setDis.begin()))
if (setDis.begin()->f <= -vctIn[i])
setDur.insert(setDis.begin()->s);
else break;
int dur = (*setDur.begin());
m2 = max(m2, vctIn[i] + dur);
setDis.insert(mp(-(vctIn[i] - dur), dur));
}
printf("%d %d\n", m1, m2);
fclose(stdin);
fclose(stdout);
return 0;
}