Pagini recente » Cod sursa (job #771178) | Cod sursa (job #2519177) | Cod sursa (job #2531577) | Cod sursa (job #2553998) | Cod sursa (job #253983)
Cod sursa(job #253983)
#include<stdio.h>
long n,m;
long sum;
long v[200010];//v[200010];
void read()
{
freopen("caramizi.in","r",stdin);
freopen("caramizi.out","w",stdout);
scanf("%ld%ld",&n,&m);
long i,j;
for(i=1;i<=n;i++)
{
scanf("%ld",&v[i]);
sum=sum+v[i];
}
}
long part(long st, long dr)
{
long i,j,m,pivot,aux;
m=(st+dr)>>1;
pivot=v[m];
i=st-1;
j=dr+1;
while(1)
{
do{++i;}while(v[i]<pivot);
do{--j;}while(v[j]>pivot);
if(i<j)
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
else
return j;
}
}
void quick(long st, long dr)
{
long p;
if(st<dr)
{
p=part(st,dr);
quick(st,p);
quick(dr,p+1);
}
}
void rez()
{
long t,li,suma,csum,max,i,j,ind;
for(t=1;t<=m;t++)
{
suma=0;
max=0;
scanf("%ld",&li);
for(ind=n;v[ind]>li;ind--)
{
suma=suma+li;
}
for(i=ind;i>=1;i--)
suma=suma+v[i];
sum=suma;
for(j=li;j>=1;j--)
{
csum=sum;
csum=csum-csum%j;
if(csum>max)
max=csum;
sum=sum-(n-ind);
for(;v[ind]>(j-1);ind--)
sum=sum-v[ind]+j-1;
}
printf("%ld\n",max);
}
}
int main()
{
read();
quick(1,n);
rez();
return 0;
}