Pagini recente » Cod sursa (job #47740) | Cod sursa (job #536471) | Cod sursa (job #2702444) | Cod sursa (job #1547876) | Cod sursa (job #2021451)
#include <cstdio>
#define MAXC 1000000
#define MAXN 200000
int v[MAXN + 1];
long long s[MAXN], d[MAXC + 1], u[MAXN + 1];
inline long long max2(long long a, long long b){
return a < b ? b : a;
}
int main(){
FILE *in = fopen("caramizi.in", "r");
int n, m, i, p;
fscanf(in, "%d%d", &n, &m);
for(i = 0; i < n; i++){
fscanf(in, "%d", &v[i]);
s[i] = v[i];
if(i != 0)
s[i] += s[i - 1];
}
p = 0;
i = 1;
v[n] = MAXC;
while(i <= v[n]){
if(i == v[p])
p++;
d[i] = max2(d[i - 1], 1LL * (n - p + s[p - 1] / i) * i);
i++;
}
for(p = s[n - 1] / v[n - 1]; p > 0; p--){
u[p] = max2(u[p + 1], s[n - 1] / p * p);
}
u[0] = u[1];
FILE *out = fopen("caramizi.out", "w");
long long l, x;
for(i = 0; i < m; i++){
fscanf(in, "%lld", &l);
if(l <= v[n])
fprintf(out, "%lld\n", d[l]);
else{
x = s[n - 1] / l;
fprintf(out, "%d\n", u[x + 1]);
}
}
fclose(in);
fclose(out);
return 0;
}