Cod sursa(job #464893)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 22 iunie 2010 14:02:39
Problema Caramizi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<fstream.h>
#include<algorithm>
using namespace std;
long long S[1000010], V[1000010];
int N, M;
int main()
{ifstream q("caramizi.in");
ofstream w("caramizi.out");
q>>N>>M;
int c, i, maxc=0;
for(i=1;i<=N;i++) 
  {q>>c;
  maxc=max(maxc,c);
  V[c]++;}
for(i=1;i<=maxc;i++)
 S[i]=S[i-1]+V[i-1]*(i-1);
long long sum=S[maxc]+V[maxc]*maxc;
for(i=maxc;i>0;i--)
  V[i]+=V[i+1];
for(i=1;i<=maxc;i++) 
  {S[i]=(S[i]+V[i]*i)/i*i;
  S[i]=max(S[i],S[i-1]);}
N=sum/maxc;
V[N+1]=S[maxc];
for(i=N;i>0;i--) 
  {V[i]=(long long) (sum/i*i);
  V[i]=max(V[i],V[i+1]);}
while (M--)
   {q>>c;
   if(c<=maxc)
    w<<S[c]<<"\n"; 
   else 
    w<<max((long long) (sum/c*c),V[sum/c+1])<<"\n";}
return 0;}