Pagini recente » Cod sursa (job #574145) | Cod sursa (job #1737239) | Cod sursa (job #1357564) | Cod sursa (job #707569) | Cod sursa (job #256280)
Cod sursa(job #256280)
#include<iostream.h>
#include<stdio.h>
#define max(a,b) (a>b?a:b)
FILE *f=fopen("caramizi.in","r"),*g=fopen("caramizi.out","w");
long n,m;
long long a[200000],n1,b[200000],sol[1000005],i,j,max1,poz,aux,ant,ant1,sum,c[1000005],sol2[200000],tow[200000],res[200000];
int main()
{
fscanf(f,"%ld%ld",&n,&m);
for(i=1;i<=n;i++)
fscanf(f,"%lld",&a[i]);
for(i=1;i<=m;i++)
{
fscanf(f,"%lld",&b[i]);
max1=max(max1,b[i]);
}
for(i=1;i<=n;i++)
c[a[i]]++;
sum=0;n1=n;
for(i=1;i<=1000000;i++)
{
sol[i]=max(n+sum-sum%i,sol[i-1]);
n1=n1-c[i];
sum=sum+c[i]*i;
}
if(max1<=1000000)
for(i=1;i<=m;i++)
fprintf(g,"%lld\n",sol[b[i]]);
else
{
sol2[n+1]=sol[1000000];tow[n+1]=1000000;
for(i=n;i;i--)
{
tow[i]=sum/i;
sol2[i]=tow[i]*i;
if(sol2[i]<sol2[i+1])
{
sol2[i]=sol2[i+1];tow[i]=tow[i+1];
}
}
for(i=1;i<=m;i++)
{
if(b[i]<=1000000) res[i]=sol[b[i]];
else if(b[i]>=sum) res[i]=sum;
else{
long long min4=1,max4=n+1,mij;;
while(min4+1<max4)
{ mij=min4+(max4-min4)/2;
if(tow[mij]>b[i]) min4=mij;
else max4=mij;
}
res[i]=max(sol2[max4],min4*b[i]);
}
}
for(i=1;i<=m;i++)
fprintf(g,"%lld\n",res[i]);
}
return 0;
}