Cod sursa(job #1990320)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 11 iunie 2017 13:53:09
Problema Caramizi Scor 85
Compilator cpp Status done
Runda Simulare 14a Marime 0.84 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

typedef long long i64;

const int nmax = 2e5;
const int cmax = 1e6;

int v[nmax + 1];
i64 sol[cmax + 1];

int main() {
    int n, m;
    fin >> n >> m;

    for (int i = 1; i <= n; ++ i) {
        fin >> v[ i ];
    }
    sort(v + 1, v + n + 1);

    i64 sum = 0;
    int j = 0;
    for (int i = 1; i <= cmax; ++ i) {
        while (j + 1 <= n && v[j + 1] <= i) {
            sum += v[ ++ j ];
        }

        sol[ i ] = max(sol[i - 1], 1LL * (n - j) * i + sum / i * i);
    }

    for (int i = 1; i <= m; ++ i) {
        int x;
        fin >> x;

        if (x <= cmax) {
            fout << sol[ x ] << "\n";
        } else {
            fout << sum << "\n";
        }
    }

    fin.close();
    fout.close();
    return 0;
}