Pagini recente » Cod sursa (job #2880958) | Cod sursa (job #1513552) | Cod sursa (job #1757636) | Cod sursa (job #2904242) | Cod sursa (job #2021461)
#include <cstdio>
#include <algorithm>
#define MAXC 1000000
#define MAXN 200000
int v[MAXN + 1];
long long s[MAXN], d[MAXC + 1], u[MAXN + 1];
inline long long max2(long long a, long long b){
return a < b ? b : a;
}
int main(){
FILE *in = fopen("caramizi.in", "r");
int n, m, i, j, p;
long long aux;
fscanf(in, "%d%d", &n, &m);
for(i = 0; i < n; i++){
fscanf(in, "%d", &v[i]);
}
std::sort(v, v + n);
for(i = 0; i < n; i++){
s[i] = v[i];
if(i != 0)
s[i] += s[i - 1];
}
p = 0;
i = 1;
v[n] = MAXC;
while(i <= v[n]){
if(i == v[p])
p++;
if(p == 0)
aux = 0;
else
aux = s[p - 1];
d[i] = max2(d[i - 1], 1LL * (n - p + aux / i) * i);
i++;
}
for(p = s[n - 1] / v[n - 1]; p > 0; p--){
u[p] = max2(u[p + 1], s[n - 1] / p * p);
}
u[0] = u[1];
FILE *out = fopen("caramizi.out", "w");
long long l, x;
for(i = 0; i < m; i++){
fscanf(in, "%lld", &l);
if(l <= v[n])
fprintf(out, "%lld\n", d[l]);
else{
x = s[n - 1] / l;
fprintf(out, "%d\n", u[x + 1]);
}
}
fclose(in);
fclose(out);
return 0;
}