Pagini recente » Cod sursa (job #2857995) | Cod sursa (job #2387220) | Cod sursa (job #1379535) | Cod sursa (job #671352) | Cod sursa (job #253973)
Cod sursa(job #253973)
// using ...hibride:)
#include <stdio.h>
#include <algorithm>
#define ll long long
#define MAX 1024 * 1024
#define LMAX 1000010
using namespace std;
int n, m;
ll vctElem[200010], Q[200010];
ll sumaTot, qMax;
ll vctSol[MAX];
ll maxll(ll x, ll y)
{
if (x > y)
return x;
return y;
}
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("%lld", &vctElem[i]);
sumaTot += vctElem[i];
}
for (int i = 1; i <= m; i++)
{
scanf("%lld", &Q[i]);
qMax = max(qMax, Q[i]);
}
sort(vctElem + 1, vctElem + 1 + n);
if (qMax <= LMAX)
{
// pnm... pentru alea 80 de puncte sper:)
ll st = n;
for (ll i = LMAX; i; i--)
{
for (; vctElem[st] > i && st; st--);
sumaTot -= (ll) n - st;
ll x = sumaTot / i;
vctSol[i] = (ll) x * i;
}
for (int i = 1; i <= LMAX; i++)
vctSol[i] = maxll(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;
}