Pagini recente » Cod sursa (job #1079646) | Cod sursa (job #1478637) | Cod sursa (job #1462396) | Cod sursa (job #1148411) | Cod sursa (job #253879)
Cod sursa(job #253879)
#include <cstdio>
#include <algorithm>
#define maxn 200010
using namespace std;
int n, m, i, j, l, ct, mq, nr;
int v[maxn], q[maxn];
long long t[1000001], mx[1000001], tot, sum, s, dmax;
int main() {
freopen("caramizi.in", "r", stdin);
freopen("caramizi.out", "w", stdout);
scanf("%d%d", &n, &m);
for (i = 1; i <= n; i++) {
scanf("%d", &v[i]);
s += v[i];
}
nr = 1;
for (i = 2; i * i < s; i++)
if (s % i == 0)
nr = i;
dmax = s / nr;
sort(v + 1, v + n + 1);
for (i = 1; i <= m; i++) {
scanf("%d", &q[i]);
if (q[i] > mq)
mq = q[i];
}
if (mq > 1000000 && dmax < mq)
mq = dmax;
i = 1; sum = 0;
for (l = 1; l <= mq; l++) {
while (v[i] < l && i <= n) {
sum += v[i];
i++;
}
ct = n - i + 1;
tot = (1LL * l * ct) + sum;
t[l] = tot / l;
t[l] *= l;
}
for (i = 1; i <= mq; i++) {
mx[i] = mx[i - 1];
if (t[i] > mx[i])
mx[i] = t[i];
}
/* for (i = 1; i <= mq; i++) {
printf("%d ", t[i]);
}
printf("\n");*/
for (i = 1; i <= m; i++) {
if (mq > 1000000 && q[i] >= dmax)
printf("%lld\n", mx[dmax]);
else
printf("%lld\n", mx[q[i]]);
}
return 0;
}