Cod sursa(job #2412355)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 22 aprilie 2019 10:12:57
Problema Fabrica Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("fabrica.in");
ofstream g("fabrica.out");
int i,n,nA,nB,v[50001][2],h[50001],p[50001];
long long t[100001][2],Max;
int verif(int a,int b,int c){
    if(h[a]<h[b])
        return 1;
    if(h[a]==h[b]&&v[a][c]<v[b][c])
        return 1;
    return 0;
}
void down_heap(int poz,int k,int c){
    while(poz*2<=k){
        int st=poz*2;
        if(st+1<=k)
            st+=verif(st+1,st,c);
        if(h[poz]>h[st]){
            swap(h[st],h[poz]);
            swap(p[poz],p[st]);
        }
        poz=st;
    }
}
void solve(int c,int k){
    for(i=1;i<=k;i++){
        h[i]=v[i][c];
        p[i]=i;
    }
    for(i=1;i<=k;i++)
        down_heap(i,k,c);
    for(i=1;i<=n;i++){
        t[i][c]=h[1];
        h[1]+=v[p[1]][c];
        down_heap(1,k,c);
    }
    memset(h,0,sizeof(h));
}
int main()
{   f>>n>>nA>>nB;
    for(i=1;i<=nA;i++)
        f>>v[i][0];
    for(i=1;i<=nB;i++)
        f>>v[i][1];
    solve(0,nA);
    g<<t[n][0]<<' ';
    solve(1,nB);
    Max=0;
    for(i=1;i<=n;i++)
        Max=max(Max,t[i][0]+t[n-i+1][1]);
    g<<Max;
    return 0;
}