Pagini recente » Cod sursa (job #1688993) | Cod sursa (job #1629357) | Cod sursa (job #2695778) | Cod sursa (job #2824485) | Cod sursa (job #284222)
Cod sursa(job #284222)
#include<iostream>
#include<stdio.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a>b?b:a)
FILE *f=fopen("caramizi.in","r"),*g=fopen("caramizi.out","w");
long n,m;
long long S,a[200000],b[200000],sol[1000001],i,j,max1,s,poz,min1=100000000,aux;
void qsort(long long st,long long dr)
{
long long i=st,j=dr,c=a[(st+dr)/2],aux;
do
{
while(i<=j&&a[i]<c) i++;
while(i<=j&&a[j]>c) j--;
if(i<=j)
{
aux=a[i];a[i]=a[j];a[j]=aux;
i++;j--;
}
}while(i<=j);
if(st<j) qsort(st,j);
if(i<dr) qsort(i,dr);
}
int main()
{
fscanf(f,"%ld%ld",&n,&m);
for(i=1;i<=n;i++)
{
fscanf(f,"%lld",&a[i]);
s+=a[i];
}
qsort(1,i-1);S=s;
for(i=1;i<=m;i++)
{
fscanf(f,"%lld",&b[i]);
min1=min(min1,b[i]);
}
for(i=1000000,poz=n;i>=min1;i--)
{
while(a[poz]>i&&poz) poz--;
s-=n-poz;
sol[i]=i*(aux=s/i);
}
for(i=2;i<=1000000;i++)
sol[i]=max(sol[i-1],sol[i]);
for(i=1;i<=m;i++)
if(b[i]<=1000000) fprintf(g,"%lld\n",sol[b[i]]);
else
fprintf(g,"%lld\n",S/b[i]+1);
return 0;
}