Pagini recente » Cod sursa (job #366746) | Cod sursa (job #392775) | Cod sursa (job #193914) | Cod sursa (job #2484872) | Cod sursa (job #253885)
Cod sursa(job #253885)
#include <cstdio>
#include <cstdlib>
#define FIN "caramizi.in"
#define FOUT "caramizi.out"
#define N 200005
int v[N],n,m,rez,sum[N];
int comp(const void* a, const void * b)
{
int aa,bb;
aa = *(int*)a;
bb = *(int*)b;
return aa > bb ? aa : bb;
}
void read()
{
int i;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d%d", &n, &m);
for (i = 1; i <= n; ++i)
{
scanf("%d", &v[i]);
sum[i] = sum[i-1] + v[i];
}
qsort(v+1,n,sizeof (v[1]),comp);
}
/*int cautbin (int x)
{
int p = 1, u = n, mm;
while (p+1<u)
{
mm = (p + u)/2;
if ( v[mm] > x)
u = mm-1;
else
p = mm;
}
if ( v[p-1] > x)
--p;
if ( v[p] < x )
++p;
if ( p == n )
return sum[n] / x;
if ( v[p] >= x)
return (n - p + 1) + (sum[p-1] / x);
return sum[p] / x;
}*/
void solve()
{
int i,j,p,u;
for (i = 1; i <= m; ++i)
{
scanf("%d", &u);
rez = 0; j = 1;
for (j = 1; j <= n && v[j] <= u; ++j)
{
p = v[j] * (n-j+1 + sum[j-1] / v[j]);
if (p > rez)
rez = p;
}
if (j <= n )
if ((n - j + 1) * u > rez)
rez = (n - j + 1) * u;
for (j = v[n] + 1; j <= sum[n]&& j <= u; ++j)
{
p = j * (sum[n] / j);
if (p > rez)
rez = p;
}
printf("%d\n", rez);
}
//.printf("\n");
}
int main()
{
read();
solve();
//write();
}