Pagini recente » Cod sursa (job #568415) | Cod sursa (job #2626108) | Cod sursa (job #2817227) | Cod sursa (job #1441965) | Cod sursa (job #258179)
Cod sursa(job #258179)
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define MAXN 200010
#define MAXX 1000010
#define ll long long
int N, M;
int NR, Q;
int A[MAXN];
ll S, V;
ll T[MAXX], T2[MAXX];
int main()
{
freopen("caramizi.in", "r", stdin);
freopen("caramizi.out", "w", stdout);
int i, j, hmin;
scanf("%d %d ", &N, &M);
for (i = 1; i <= N; i++) scanf("%d ", &A[i]);
sort(A+1, A+N+1);
NR = N, S = 0;
for (i = 1, j = 1; i <= A[N]; i++)
{
for (; j <= N && A[j] <= i; j++)
{
S += A[j];
NR--;
}
T[i] = max(T[i-1], 1LL * NR*i + 1LL * (S/i) * i);
}
for (i = S/N; i >= 1; i--)
{
T2[i] = T2[i+1];
if (S > 1LL* i*A[N]) T2[i] = max(T2[i], 1LL * i * (S/i));
}
for (i = 1; i <= M; i++)
{
scanf("%d ", &Q);
if (Q <= A[N]) printf("%lld\n", T[Q]);
else {
hmin = S / Q, V = 0;
if (S > 1LL * (hmin+1) * A[N]) V = T2[hmin+1];
V = max(V, 1LL * Q * hmin);
printf("%lld\n", max(T[A[N]], V));
}
}
return 0;
}