Cod sursa(job #1007849)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 9 octombrie 2013 20:11:27
Problema Caramizi Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
# include <algorithm>
using namespace std;

typedef long long ll;

ifstream fin("caramizi.in"); ofstream fout("caramizi.out");

const int MAX = 200005, oo = 1000005;

ll sol = -1, dp[oo], rez[oo];
int N, M, C[MAX];

int main ()
{

    fin >> N >> M;
    for (int i = 1; i <= N; ++i)
        fin >> C[i];
    C[0] = 1, C[N + 1] = oo;
    sort (C + 1, C + N + 1);
    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 * 1LL) + 1LL * (N - i) * j);
    }
    for (int i = sol / C[N]; i; --i)
        rez[i] = max (sol - sol % i, rez[i + 1]);
    for (int i = 1, x; i <= M; ++i) {
        fin >> x;

        if(x < oo)
        fout << dp[x] << "\n";
        else
            fout << rez[sol / x + 1] << "\n";
    }
}