Cod sursa(job #406634)

Utilizator freak93Adrian Budau freak93 Data 1 martie 2010 18:20:21
Problema Caramizi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<fstream>

using namespace std;

const char iname[]="caramizi.in";
const char oname[]="caramizi.out";
const int maxc=1000005;
const int maxn=200005;

ifstream f(iname);
ofstream g(oname);

long long R[maxc],C[maxn],i,j,n,m,k,cmax,many[maxc],s;

int main()
{
    f>>n>>m;
    for(i=1;i<=n;++i)
        f>>j,++many[j],cmax=max(cmax,j),s+=j;
    for(i=1;i<=cmax;++i)
        R[i]=R[i-1]+i*many[i];
    for(i=cmax;i;--i)
        many[i]+=many[i+1];
    for(i=1;i<=cmax;++i)
        R[i]=max(R[i-1],((R[i]+many[i+1]*i)/i)*i);

    C[s/cmax+1]=R[cmax];
    for(i=s/cmax;i;--i)
        C[i]=max(C[i+1],(s/i)*i);
    C[0]=C[1];

    for(i=1;i<=m;++i)
    {
        f>>j;
        if(j<=cmax)
            g<<R[j]<<"\n";
        else
            g<<max((s/j)*j,C[s/j+1])<<"\n";
    }

    f.close();
    g.close();

    return 0;
}