Pagini recente » Istoria paginii utilizator/mario2016 | Monitorul de evaluare | Rating Moisuc Doris (moisucdoris) | Diferente pentru runda/barbari intre reviziile 2 si 1 | Cod sursa (job #2013852)
#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);
for(i = 1; i <= n; i++) {
fscanf(fi,"%d " ,&c);
fr[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 = SIZE; i >= 1; i--)
sol2[i] = std::max(sol2[i + 1], (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) / l]);
}
fclose(fi);
fclose(fout);
return 0;
}