Pagini recente » Cod sursa (job #2254819) | Cod sursa (job #2654832) | oji-2015-cls11-12124151 | Cod sursa (job #1395562) | Cod sursa (job #2025962)
#include <stdio.h>
#include <math.h>
#define MAXVAL 1000000
int f[1 + MAXVAL];
long long d[1 + MAXVAL];
long long e[1 + MAXVAL];
int main(){
FILE*fi,*fo;
fi = fopen("caramizi.in","r");
fo = fopen("caramizi.out","w");
int n, m;
fscanf(fi,"%d%d", &n, &m);
int max = -1;
for(int i = 1; i <= n; i++){
int x;
fscanf(fi,"%d", &x);
f[x] ++;
if(x > max)
max = x;
}
long long sum = 0;
int spate = 0;
for(int i = 1; i <= MAXVAL; i++){
sum += 1LL * f[i] * i;
spate += f[i];
d[i] = d[i - 1];
if(sum - sum % i + 1LL * (n - spate) * i > d[i])
d[i] = sum - sum % i + 1LL * (n - spate) * i;
}
for(int i = sum / max; i >= 1; i--){
e[i] = e[i + 1];
if(sum - sum % i > e[i])
e[i] = sum - sum % i;
}
for(int i = 1; i <= m; i++){
int x;
fscanf(fi,"%d", &x);
if(x <= MAXVAL) fprintf(fo,"%lld\n", d[x]);
else fprintf(fo,"%lld\n", e[(int)ceil(1.0 * sum / x)]);
}
fclose(fi);
fclose(fo);
return 0;
}