Pagini recente » Cod sursa (job #3279858) | Cod sursa (job #2376732) | Cod sursa (job #403537) | Cod sursa (job #2905713) | Cod sursa (job #270674)
Cod sursa(job #270674)
#include <stdio.h>
#include <algorithm>
#define LL long long
using namespace std;
int n,m,p,a[200005],Q[200005],ind[200005];
long long s[200005],SS,rez[1000005],sol[200005];
int main(){
freopen("caramizi.in","r",stdin); freopen("caramizi.out","w",stdout);
scanf("%d %d\n",&n,&m);
int i,j,x,p,low,high,mid;
for (i=1;i<=n;++i)scanf("%d",&a[i]);
for (i=1;i<=m;++i)scanf("%d",&Q[i]);
sort(a+1,a+n+1);
for (i=1;i<=n;++i)s[i]=(LL)s[i-1]+a[i];
for (i=1,p=0;i<=n;++i)if (a[i]!=a[i+1])ind[++p]=i;
for (j=1;j<=1000000;++j){
low=1;high=p+1;x=j;
while (low<high){
mid=(high+low)>>1;
if (x<=a[ind[mid]])high=mid; else low=mid+1;
}
if (a[ind[low]]==x)SS=s[ind[low]]+(LL)x*(n-ind[low]);
else SS=s[ind[low-1]]+(LL)x*(n-ind[low-1]);
rez[j]=(LL)(SS/x)*x;if (rez[j-1]>rez[j])rez[j]=rez[j-1];
}
for (i=s[n]/a[n]; i ;--i){
sol[i]=(LL)(s[n]/i)*i;
if (sol[i+1]>sol[i])sol[i]=sol[i+1];
}
for (i=1;i<=m;++i)
if (Q[i]<=1000000)printf("%lld\n",rez[Q[i]]);
else printf("%lld\n",sol[(LL)s[n]/Q[i]]);
return 0;
}