Pagini recente » Cod sursa (job #1105794) | Cod sursa (job #162970) | Cod sursa (job #2194836) | Cod sursa (job #2093326) | Cod sursa (job #390374)
Cod sursa(job #390374)
#include <cstdio>
#define CMAX 1000010
#include <algorithm>
using namespace std;
long long S[CMAX], V[CMAX];
int N, M;
int main()
{
freopen("caramizi.in","r",stdin);
freopen("caramizi.out","w",stdout);
scanf("%d %d",&N,&M);
int c, i, maxc=0;
for (i=1; i<=N; i++)
{
scanf("%d",&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--)
{
scanf("%d",&c);
if (c<=maxc) printf("%lld\n",S[c]); else
printf("%lld\n",max((long long) (sum/c*c), V[sum/c+1]));
}
}