Pagini recente » Cod sursa (job #2808352) | Cod sursa (job #131561) | Cod sursa (job #1149315) | Cod sursa (job #2886916) | Cod sursa (job #253704)
Cod sursa(job #253704)
using namespace std;
#include<stdio.h>
#include<algorithm>
FILE *f=fopen("caramizi.in","r"),
*g=fopen("caramizi.out","w");
#define N_MAX 200009
long long min(long long a,long long b,long long c)
{ if(a<b&&a<c) return a;
if(b<a&&b<c) return b;
return c;
}
long long min(long long a,long long b)
{ if(a>b) return b;
return a;
}
long long max(long long a,long long b)
{ if(a>b) return a;
return b;
}
long long sums[N_MAX],a[N_MAX],things[N_MAX],i,j,n,m,k,v,x;
int bs(int val)
{
int i, step;
for (step = 1; step < n; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step <=n && things[i + step] >= val)
i += step;
return i;
}
int main()
{ fscanf(f,"%lld %lld",&n,&m);
for(i=1;i<=n;++i) fscanf(f,"%lld",&a[i]);
sort(a+1,a+n+1);
for(i=1;i<=n;++i) sums[i]=sums[i-1]+a[i];
things[n]=a[1];
things[n-1]=min(a[1]+a[2],a[3],sums[n]/(n-1));
for(i=n-2;i>=1;--i) { things[i]=min(sums[n-i+1],sums[2*(n-i)+1]-sums[n-i+1],sums[n]/i);
if(things[i]<things[i+1]) things[i]=2000000007;
}
for(i=1;i<=m;++i) { fscanf(f,"%lld",&x);
k=bs(x);
if(k==n) fprintf(g,"%lld\n",x*n);
else fprintf(g,"%lld\n",min(sums[n],max(things[k+1]*(k+1),x*k)));
}
fclose(f);
fclose(g);
return 0;
}