Pagini recente » Cod sursa (job #154651) | Cod sursa (job #1182359) | Cod sursa (job #1161647) | Cod sursa (job #789696) | Cod sursa (job #607226)
Cod sursa(job #607226)
#include <algorithm>
#include <cstdio>
#define INF 1000005
#define DIM 200005
#define ll long long
using namespace std;
ll dp[INF],rez[INF];
ll sol=-1;
int C[DIM];
int n,m;
void read ()
{
int i;
scanf ("%d%d",&n,&m);
for (i=1; i<=n; ++i)
scanf ("%d",C+i);
C[0]=1;
C[n+1]=INF;
sort (C+1,C+n+1);
}
void solve ()
{
ll i,j;
for (int i = 0; i <= n; ++i) {
sol += C[i];
for (int j = C[i]; j < C[i + 1]; ++j)
dp[j] = max (dp[j - 1], sol - sol % j + (n - i) * j);
}
for (i=sol/C[n]; i; --i)
rez[i]=max (sol-sol%i,rez[i+1]);
}
void query ()
{
int i,x;
for (i=1; i<=m; ++i)
{
scanf ("%d",&x);
if (x<INF)
printf ("%lld\n",dp[x]);
else
printf ("%lld\n",rez[sol/x+1]);
}
}
int main ()
{
freopen ("caramizi.in","r",stdin);
freopen ("caramizi.out","w",stdout);
read ();
solve ();
query ();
return 0;
}