Cod sursa(job #1007853)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 9 octombrie 2013 20:13:12
Problema Caramizi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
# include <algorithm>
# include <cstdio>
using namespace std;

typedef long long ll;
const char *FIN = "caramizi.in", *FOU = "caramizi.out";
const int MAX = 200005, oo = 1000005;

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

int main (void) {
    freopen (FIN, "r", stdin);
    freopen (FOU, "w", stdout);

    scanf ("%d %d", &N, &M);
    for (int i = 1; i <= N; ++i)
        scanf ("%d", 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) {
        scanf ("%d", &x);
        printf ("%lld\n", x < oo ? dp[x] : rez[sol / x + 1]);
    }
}