Pagini recente » Cod sursa (job #2330839) | Cod sursa (job #1824467) | Cod sursa (job #3289300) | Cod sursa (job #2877418) | Cod sursa (job #1576820)
#include <bits/stdc++.h>
#define ll long long
#define maxN 200002
using namespace std;
int n, m, maxv , v[maxN];
ll nb[maxN], nB[maxN], s[maxN];
void read()
{
int i;
freopen("caramizi.in", "r", stdin);
scanf("%d %d", &n, &m);
for (i = 1; i <= n; ++ i)
{
scanf("%d", &v[i]);
if (maxv < v[i])
maxv = v[i];
}
}
void solve()
{
int i, p = 1;
maxv = 200000;
sort(v + 1, v + n + 1);
for (i = 1; i <= n; ++ i)
s[i] = s[i - 1] + v[i];
for (i = 1; i <= maxv; ++ i)
{
while (i > v[p] && p <= n)
++ p;
ll vi = 1LL * s[p - 1] + 1ll * (n - p + 1) * i;
nb[i] = max(nb[i - 1], vi - vi % i);
}
}
void write()
{
freopen("caramizi.out", "w", stdout);
ll sum = s[n] - 1;
int i, x;
for (i = sum / v[n]; i >= 1; -- i)
nB[i] = max(nB[i + 1], sum - sum % i);
while (m --)
{
scanf("%d", &x);
if (x <= maxv)
printf("%lld\n", nb[x]);
else
printf("%lld\n", nB[(sum / x) + 1]);
}
}
int main()
{
read();
solve();
write();
return 0;
}