Pagini recente » Cod sursa (job #2638591) | Cod sursa (job #920607) | Cod sursa (job #2142027) | Cod sursa (job #470781) | Cod sursa (job #1200487)
#include <cstdio>
#include<algorithm>
#define ll long long
#define DIM 8192
using namespace std;
ll s[1000010],v[1000010];
int n,m,pz,i,maxc,c;
char ax[DIM+16];
inline void cit(int &x)
{ x=0;
while(ax[pz]<'0' || ax[pz]>'9')
if(++pz==DIM) fread(ax,1,DIM,stdin), pz=0;
while(ax[pz]>='0' && ax[pz]<='9')
{ x=x*10+ax[pz]-'0';
if(++pz==DIM) fread(ax,1, DIM, stdin), pz=0;
}
}
int main()
{ freopen ("caramizi.in","r",stdin); freopen ("caramizi.out","w",stdout);
cit(n); cit(m);
for(i=1;i<=n;i++) {cit(c); maxc=max(maxc,c); v[c]++;}
for(i=1;i<=maxc;i++) s[i]=s[i-1]+v[i-1]*(i-1);
ll 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]=sum/i*i; v[i]=max(v[i],v[i+1]);}
while(m--)
{ cit(c);
if(c<=maxc) printf("%lld\n",s[c]);
else printf("%lld\n",max(sum/c*c,v[sum/c+1]));
}
return 0;
}