Pagini recente » Cod sursa (job #1169857) | Cod sursa (job #2748931) | Cod sursa (job #1173331) | Cod sursa (job #2064589) | Cod sursa (job #2025951)
#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);
for(int i = 1; i <= n; i++){
int x;
fscanf(fi,"%d", &x);
f[x] ++;
}
long long sum = 0;
int spate = 0;
int max = -1;
for(int i = 1; i <= MAXVAL; i++){
sum += 1LL * f[i] * i;
if(f[i] > 0)
max = i;
spate += f[i];
d[i] = d[i - 1];
if(sum - sum % i + (n - spate) * i > d[i])
d[i] = sum - sum % i + (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;
}