Pagini recente » Cod sursa (job #907309) | Cod sursa (job #2459604) | Cod sursa (job #3194802) | Cod sursa (job #185279) | Cod sursa (job #253854)
Cod sursa(job #253854)
// using ...hibride:)
#include <stdio.h>
#include <algorithm>
#define ll long long
#define MAX 1024 * 1024
#define LMAX 1000010
using namespace std;
int n, m, qMax;
int vctElem[200010], Q[200010];
ll sumaTot;
ll vctSol[MAX];
int main()
{
freopen("caramizi.in", "r", stdin);
freopen("caramizi.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++)
{
scanf("%d", &vctElem[i]);
sumaTot += (ll) vctElem[i];
}
for (int i = 1; i <= m; i++)
{
scanf("%d", &Q[i]);
qMax = max(qMax, Q[i]);
}
sort(vctElem + 1, vctElem + 1 + n);
if (qMax <= LMAX)
{
// pnm... pentru alea 80 de puncte sper:)
int st = n;
for (ll i = LMAX; i; i--)
{
for (; vctElem[st] > i && st; st--);
sumaTot -= (ll) n - st;
ll x = sumaTot / i;
vctSol[i] = x * i;
}
for (int i = 1; i <= LMAX; i++)
vctSol[i] = max(vctSol[i - 1], vctSol[i]);
for (int i = 1; i <= m; i++)
printf("%lld\n", vctSol[Q[i]]);
}
else
{
// pnm sa speram ca merge si asta pt 20 de puncte...
}
fclose(stdin);
fclose(stdout);
return 0;
}