Pagini recente » Cod sursa (job #890701) | Cod sursa (job #514561) | Cod sursa (job #2574213) | Cod sursa (job #3146286) | Cod sursa (job #253822)
Cod sursa(job #253822)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("caramizi.in");
ofstream fout("caramizi.out");
#define NMAX 200010
#define LMAX 1000000
long long A[NMAX],B[NMAX],D[NMAX],N,M;
long long C[LMAX];
int cauta(long long c);
int main()
{
fin>>N>>M;
long long i,pos,x;
for (i=1;i<=N;i++)
fin>>A[i];
for (i=1;i<=N;i++)
fin>>D[i];
sort(A+1,A+N+1);
B[0]=0;
for (i=1;i<=N;i++)
B[i]=B[i-1]+A[i];
C[1]=N;
for (i=1;i<=LMAX;i++)
{
if (i<=A[1]) pos=0;
else
if (i>=A[N]) pos=N;
else
pos=cauta(i);
C[i]=B[pos]-B[pos]%i+(N-pos)*i;
if (C[i-1]>C[i]) C[i]=C[i-1];
}
for (i=1;i<=M;i++)
fout<<C[D[i]]<<'\n';
fout.close();
return 0;
}
int cauta(long long c)
{
int st,sf,m;
st=1;
sf=N;
m=(st+sf)/2;
while (A[m]>c||A[m+1]<=c)
{
if (A[m]>c) sf=m-1;
if (A[m+1]<=c) st=m+1;
m=(st+sf)/2;
}
return m;
}