Pagini recente » Borderou de evaluare (job #1259863) | Cod sursa (job #1114751) | Borderou de evaluare (job #1714095) | Cod sursa (job #677873) | Cod sursa (job #467629)
Cod sursa(job #467629)
#include <stdio.h>
#include <algorithm>
using namespace std;
long int c[200001], car[200000001];
long int n, m, i, j, k;
long int suma, lim;
long int inaltime;
int main ()
{
FILE *f = fopen ("caramizi.in","r");
FILE *g = fopen ("caramizi.out","w");
fscanf (f,"%d %d", &n, &m);
for (i=1; i<=n; ++i)
{
fscanf (f,"%ld", &c[i]);
suma += c[i];
}
sort (c + 1, c + 1 + n);
lim = c[1];
inaltime = n;
j = 1;
for (i=1; i<suma; ++i)
{
if (i <= lim)
{
if (i * inaltime <= suma)
car[i] = max (car[i-1], i * inaltime);
else
car[i] = car[i-1];
}
else
{
inaltime --;
if (i * inaltime <= suma)
car[i] = max (car[i-1], i * inaltime);
else
car[i] = car[i-1];
j ++;
lim += c[j];
}
}
car[suma] = suma;
/*for (i=1; i<=suma; ++i)
printf ("%d : %d\n", i, car[i]);*/
for (i=1; i<=m; ++i)
{
fscanf (f,"%ld", &j);
if (j > suma)
fprintf (g,"%ld\n", car[suma]);
else
fprintf (g,"%ld\n", car[j]);
}
fclose(g);
fclose(f);
return 0;
}