Pagini recente » Cod sursa (job #1270192) | Cod sursa (job #1248069) | Autentificare | Cod sursa (job #2957769) | Cod sursa (job #2734564)
#include <algorithm>
#include <cassert>
#include <cstdio>
using namespace std;
typedef long long i64;
const i64 nmax= 200000;
const i64 vmax= 1000000;
i64 c[nmax+10], d[vmax+10], d2[vmax+10];
int main( ) {
assert( freopen( "caramizi.in", "r", stdin ) );
assert( freopen( "caramizi.out", "w", stdout ) );
i64 n, m;
assert( scanf( "%lld%lld", &n, &m ) );
for ( i64 i= 1; i<=n; ++i ) {
assert( scanf( "%lld", &c[i] ) );
}
sort( c+1, c+n+1 );
c[0]= 1, c[n+1]= vmax+1;
i64 aux= -1;
for ( i64 i= 0; i<=n; ++i ) {
aux= aux+c[i];
for ( i64 j= c[i]; j<=c[i+1]-1; ++j ) {
d[j]= max(d[j-1], (aux/j+n-i)*j);
}
}
for ( i64 i= aux/c[n]; i>=1; --i ) {
d2[i]= max(d2[i+1], aux-aux%i);
}
for ( i64 cnt= 1; cnt<=m; ++cnt ) {
i64 y, sol= 0;
assert( scanf( "%lld", &y ) );
if ( y<=vmax ) {
sol= d[y];
} else {
sol= d2[aux/y+1];
}
printf( "%lld\n", sol );
}
return 0;
}