Cod sursa(job #1201761)

Utilizator enedumitruene dumitru enedumitru Data 25 iunie 2014 22:54:35
Problema Caramizi Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("caramizi.in"); ofstream g("caramizi.out");
long long n,m,i,s,c,cmax,X[1000005],Nr[1000005],R[1000005],D[1000005],H[200005];
int main()
{   f>>n>>m;
    for(i=1;i<=n;++i) f>>c, ++X[c], cmax=max(cmax,c), s+=c;
    for(i=1;i<=cmax;++i) R[i]=R[i-1]+i*X[i];
    for(i=cmax;i;--i) Nr[i]=Nr[i+1]+X[i];
	for(i=1;i<=cmax;++i) D[i]=max(D[i-1],R[i]/i*i+Nr[i+1]*i);
    H[s/cmax+1]=D[cmax];
    for(i=s/cmax;i;--i) H[i]=max(H[i+1],s/i*i);
    for(i=1;i<=m;++i)
    {   f>>c;
        if(c<=cmax) g<<D[c]<<"\n"; else g<<max(s/c*c,H[s/c+1])<<"\n";
    }
    g.close(); return 0;
}