Cod sursa(job #253941)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 6 februarie 2009 13:46:49
Problema Caramizi Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 1 Marime 1.15 kb
#include <cstdio>
#define FIN "caramizi.in"
#define FOUT "caramizi.out"
#define N 200005
int v[N],n,m,sum[N],max;
void read()
{
     int i;
     freopen(FIN, "r", stdin); 
     freopen(FOUT, "w", stdout);       
     scanf("%d%d", &n, &m);
     for (i = 1; i <= n; ++i)
     {
         scanf("%d", &v[i]);
         sum[i] = sum[i-1] + v[i];
     }
}
int cautbin (int x)
{
    int p = 1, u = n, mm; 
    while (p+1<u)
    {
          mm = (p + u)/2;
          if ( v[mm] > x) 
             u = mm-1;
          else
              p = mm;     
    }   
    if ( v[p-1] > x)
       --p;
    if ( v[p] < x )
       ++p;
    if ( p == n )
        return sum[n] / x;
    if ( v[p] >= x)
        return (n - p + 1) + (sum[p-1] / x);
    return sum[p] / x;
}
void solve()
{
     int i,j,p,u;
    for (i = 1; i <= m; ++i)
     {
        scanf("%d", &u);
        max = 0;
        for (j = 1; j <= u; ++j)
        {
              p = j * cautbin(j);
              if (p > max)
                 max = p; 
        }
        printf("%d\n", max);
     }
     //.printf("\n");
}
int main()
{
    read();
    solve();
    //write();
}