Pagini recente » Cod sursa (job #738368) | Cod sursa (job #2713852) | Cod sursa (job #3139436) | Cod sursa (job #2950317) | Cod sursa (job #253883)
Cod sursa(job #253883)
#include <cstdio>
#include <algorithm>
using namespace std;
long long A[200000];
int B[200000],C[200000];
int main()
{
freopen("caramizi.in","r",stdin);
freopen("caramizi.out","w",stdout);
int n,m,i,j,nr,k;
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++) scanf("%d",&B[i]),A[1]+=B[i];
sort(B+1,B+n+1);
for (i=2;i<=n;i++)
{
nr=0;
for (j=1;j<=n;j++) C[j]=B[j];
for (j=1;n-j+1>=i;j++)
while (C[j])
{
nr++;
C[j]--;
for (k=0;k<i-1;k++) C[n-k]--;
sort(C+j,C+n+1);
}
A[i] = nr;
}
long long max;
int l,r,mid;
for (i=1;i<=m;i++)
{
max = 0;
scanf("%d",&k);
l=1;r=n;
while (l<=r)
{
mid = (l+r)/2;
if (A[mid]>k) if (mid*k>max) max = mid*k;
else;
else if (A[mid]*mid>max) max = A[mid]*mid;
if (k<A[mid]) l = mid+1;
else r = mid-1;
}
//for (j=1;j<=n;j++) if (A[j]>k) if (j*k>max) max = j*k;
// else;
// else if (A[j]*j>max) max = A[j]*j;
printf("%lld\n",max);
}
}