Pagini recente » Cod sursa (job #414199) | Cod sursa (job #864510) | Cod sursa (job #1753099) | Cod sursa (job #3152708) | Cod sursa (job #2651516)
#include <bits/stdc++.h>
#define MAX 131072
#define MOD 1000000007
#define INF 2100000000
#define eps 1e-5
using namespace std;
const int NMAX = 100100;
struct obj{
int index;
long long val;
bool operator<(const obj &a) const{
return val > a.val;
}
};
int N, nra, nrb;
int va[NMAX], vb[NMAX];
long long ansA, ansB;
long long tma[NMAX];
priority_queue <obj> Q, revQ;
void read(){
scanf("%d%d%d", &N, &nra, &nrb);
for(int i = 1; i <= nra; i++)
scanf("%d", &va[i]);
for(int i = 1; i <= nrb; i++)
scanf("%d", &vb[i]);
sort(va + 1, va + nra + 1);
sort(vb + 1, vb + nrb + 1);
for(int i = 1; i <= nra; i++){
Q.push({va[i], i});
tma[i] = va[i];
}
}
int main(){
freopen("fabrica.in", "r", stdin);
freopen("fabrica.out", "w", stdout);
read();
int idx = nra, rest = N - nra, cnt = N;
while(cnt){
long long x = Q.top().val;
while(!Q.empty() && x == Q.top().val){
int a = Q.top().index;
Q.pop();
if(rest){
Q.push({x + va[a], a});
tma[a] = x + va[a];
--rest;
} else if(tma[idx] > x + va[a]){
Q.push({x + va[a], a});
tma[a] = x + va[a];
--idx;
}
cnt--;
}
ansA = max(ansA, x);
}
printf("%d", ansA);
return 0;
}