Pagini recente » Cod sursa (job #1869258) | Cod sursa (job #2348247) | Cod sursa (job #2733294) | Cod sursa (job #2739436) | Cod sursa (job #585631)
Cod sursa(job #585631)
#include <stdio.h>
#include <set>
#include <vector>
#include <algorithm>
#define LMAX 50005
#define NMAX 100005
#define ll long long
#define pii pair <int,int>
#define pb push_back
#define mp make_pair
#define f first
#define s second
using namespace std;
int n,m,val,A[LMAX],B[LMAX],rez1;
set <pii> S;
int C[NMAX];
void read()
{
scanf("%d%d%d",&val,&n,&m);
int i;
for (i=1; i<=n; i++)
scanf("%d",&A[i]);
for (i=1; i<=m; i++)
scanf("%d",&B[i]);
}
void search()
{
int i,poz;
for (i=1; i<=n; i++)
S.insert(mp(A[i],i));
for (i=1; i<=val; i++)
{
rez1=(*S.begin()).f; poz=(*S.begin()).s;
C[i]=rez1;
S.erase(S.begin());
S.insert(mp(rez1+A[poz],poz));
}
}
inline int ok(int x)
{
int i,poz,value;
S.clear();
set <pii> :: iterator it;
for (i=1; i<=m; i++)
S.insert(mp(B[i],i));
for (i=val; i>=1; i--)
{
value=(*S.begin()).f; poz=(*S.begin()).s;
if (value>x-C[i])
return 0;
S.erase(S.begin());
S.insert(mp(value+B[poz],poz));
}
return 1;
}
inline int cb()
{
int i,step=(1<<30);
for (i=0; step; step>>=1)
if (!ok(i+step))
i+=step;
return ++i;
}
int main()
{
freopen("fabrica.in","r",stdin);
freopen("fabrica.out","w",stdout);
read();
sort(A+1,A+n+1);
sort(B+1,B+m+1);
search();
printf("%d ",rez1);
printf("%d\n",cb());
return 0;
}