Pagini recente » Cod sursa (job #721317) | Cod sursa (job #2104749) | Cod sursa (job #657285) | Monitorul de evaluare | Cod sursa (job #2013862)
#include <bits/stdc++.h>
const int MAXC = (int) 1e6;
const int SIZE = (int) 2e5;
int fr[MAXC + 1];
long long sol1[MAXC + 1];
long long sol2[SIZE + 2];
int main() {
FILE *fi, *fout;
int i, n, m, l, c;
fi = fopen("caramizi.in" ,"r");
fout = fopen("caramizi.out" ,"w");
fscanf(fi,"%d %d " ,&n,&m);
int max = 0;
for(i = 1; i <= n; i++) {
fscanf(fi,"%d " ,&c);
fr[c]++;
max = std::max(max, c);
}
long long s = 0;
int p = 0;
for(i = 1; i <= MAXC; i++) {
p += fr[i];
s += 1LL * i * fr[i];
sol1[i] = std::max(sol1[i - 1], 1LL * (s / i) * i + 1LL * (n - p) * i);
}
for(i = s / max; i >= 1; i--)
sol2[i] = std::max(sol2[i + 1], 1LL * (s / i) * i);
for(i = 1; i <= m; i++) {
fscanf(fi,"%d " ,&l);
if(l <= MAXC)
fprintf(fout,"%lld\n" ,sol1[l]);
else
fprintf(fout,"%lld\n" ,sol2[s / l + 1]);
}
fclose(fi);
fclose(fout);
return 0;
}