Cod sursa(job #1745524)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 22 august 2016 01:57:33
Problema Fabrica Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

ifstream cin("fabrica.in");
ofstream cout("fabrica.out");

const int MAXN = 50000;

int a[1 + MAXN], b[1 + MAXN], aTime[1 + 2 * MAXN], bTime[1 + 2 * MAXN];
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > >Heap;

int main() {
    int n, na, nb;
    cin >> n >> na >> nb;
    for (int i = 1; i <= na; i++)
        cin >> a[i];
    for (int i = 1; i <= nb; i++)
        cin >> b[i];
    for (int i = 1; i <= na; i++)
        Heap.push(make_pair(a[i], i));
    for (int i = 1; i <= n; i++) {
        aTime[i] = Heap.top().first;
        Heap.push(make_pair(aTime[i] + a[Heap.top().second], Heap.top().second));
        Heap.pop();
    }
    cout << aTime[n] << " ";
    while (!Heap.empty())
        Heap.pop();
    for (int i = 1; i <= nb; i++)
        Heap.push(make_pair(b[i], i));
    for (int i = 1; i <= n; i++) {
        bTime[i] = Heap.top().first;
        Heap.push(make_pair(bTime[i] + b[Heap.top().second], Heap.top().second));
        Heap.pop();
    }
    int answer = 0;
    for (int i = 1; i <= n; i++)
        answer = max(answer, aTime[i] + bTime[n - i + 1]);
    cout << answer << "\n";
    return 0;
}