Cod sursa(job #607226)

Utilizator cont_de_testeCont Teste cont_de_teste Data 11 august 2011 11:37:45
Problema Caramizi Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <algorithm>
#include <cstdio>
#define INF 1000005
#define DIM 200005
#define ll long long
using namespace std;
ll dp[INF],rez[INF];
ll sol=-1;
int C[DIM];
int n,m;
void read ()
{
    int i;
    scanf ("%d%d",&n,&m);
    for (i=1; i<=n; ++i)
        scanf ("%d",C+i);
    C[0]=1;
    C[n+1]=INF;
    sort (C+1,C+n+1);
}

void solve ()
{
    ll i,j;
    for (int i = 0; i <= n; ++i) {
        sol += C[i];
        for (int j = C[i]; j < C[i + 1]; ++j)
            dp[j] = max (dp[j - 1], sol - sol % j + (n - i) * j);
    }
    for (i=sol/C[n]; i; --i)
        rez[i]=max (sol-sol%i,rez[i+1]);
}
void query ()
{
    int i,x;
    for (i=1; i<=m; ++i)
    {
        scanf ("%d",&x);
        if (x<INF)
            printf ("%lld\n",dp[x]);
        else
            printf ("%lld\n",rez[sol/x+1]);
    }
}
int main ()
{
    freopen ("caramizi.in","r",stdin);
    freopen ("caramizi.out","w",stdout);
    read ();
    solve ();
    query ();
    return 0;
}