Cod sursa(job #1574531)

Utilizator Athena99Anghel Anca Athena99 Data 20 ianuarie 2016 17:39:02
Problema Caramizi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <algorithm>
#include <fstream>

using namespace std;

ifstream fin("caramizi.in");
ofstream fout("caramizi.out");

typedef long long i64;

const i64 nmax= 200000;
const i64 vmax= 1000000;

i64 c[nmax+10], d[vmax+10], d2[vmax+10];

int main(  ) {
    i64 n, m;
    fin>>n>>m;
    for ( i64 i= 1; i<=n; ++i ) {
        fin>>c[i];
    }
    sort( c+1, c+n+1 );
    c[0]= 1, c[n+1]= vmax+1;

    i64 aux= -1;
    for ( i64 i= 0; i<=n; ++i ) {
        aux= aux+c[i];
        for ( i64 j= c[i]; j<=c[i+1]-1; ++j ) {
            d[j]= max(d[j-1], (aux/j+n-i)*j);
        }
    }

    for ( i64 i= aux/c[n]; i>=1; --i ) {
        d2[i]= max(d2[i+1], aux-aux%i);
    }

    for ( i64 cnt= 1; cnt<=m; ++cnt ) {
        i64 y, sol= 0;
        fin>>y;
        sol= d2[aux/y+1];
        if ( y<=vmax ) {
            sol= d[y];
        }

        fout<<sol<<"\n";
    }

    return 0;
}