Cod sursa(job #467629)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 29 iunie 2010 18:18:57
Problema Caramizi Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#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;
}