Cod sursa(job #2021865)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 14 septembrie 2017 21:15:12
Problema Caramizi Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
# include <fstream>
# include <algorithm>
# define DIM 200010
# define PAS 262144
using namespace std;
ifstream fin("caramizi.in");
ofstream fout("caramizi.out");
long long c[DIM],s[DIM],d[DIM],D[DIM],n,m,i,j,pas,x;
int main () {
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>c[i];
    sort(c+1,c+n+1);
    for(i=1;i<=n;i++)
        s[i]=s[i-1]+c[i];
    for(i=1;i<=DIM-5;i++){
        for(j=0,pas=PAS;pas;pas/=2)
            if(j+pas<=n&&c[j+pas]<=i)
                j+=pas;
        d[i]=max(d[i-1],i*(n-j+s[j]/i));
    }
    for(i=s[n]/(DIM+1);i>=1;i--)
        D[i]=max(D[i+1],s[n]-s[n]%i);
    for(i=1;i<=n;i++){
        fin>>x;
        if(x<=DIM)
            fout<<d[x]<<"\n";
        else
            fout<<D[s[n]/x]<<"\n";
    }
    return 0;
}