Cod sursa(job #2406848)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 16 aprilie 2019 11:46:49
Problema Fabrica Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;

priority_queue<pii,vector<pii>,greater<pii> > q;

const int maxN=(1e5)+5;

int n,a,b,ta[maxN],tb[maxN],best,v[maxN],w[maxN],sol;

int main()
{
    freopen("fabrica.in","r",stdin);
    freopen("fabrica.out","w",stdout);


    scanf("%d%d%d",&n,&a,&b);

    for(int i=1;i<=a;i++)
    {
        scanf("%d",&ta[i]);
        q.push({ta[i],i});
    }
    for(int i=1;i<=b;i++)
        scanf("%d",&tb[i]);

    for(int i=1;i<=n;i++)
    {
        pair<int,int> t=q.top();
        q.pop();
        best=max(best,t.first);
        v[i]=t.first;
        q.push({t.first+ta[t.second],t.second});
    }

    while(!q.empty()) q.pop();
    printf("%d ",best);

    for(int i=1;i<=b;i++)
        q.push({tb[i],i});
    for(int i=1;i<=n;i++)
    {
         pair<int,int> t=q.top();
        q.pop();
      //  best=max(best,t.first);
        w[i]=t.first;
        q.push({t.first+tb[t.second],t.second});
    }


    sort(v+1,v+n+1);
    sort(w+1,w+n+1);
    reverse(w+1,w+n+1);

    for(int i=1;i<=n;i++)
        sol=max(sol,v[i]+w[i]);

    printf("%d\n",sol);
    return 0;
}