Cod sursa(job #2013852)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 22 august 2017 15:19:20
Problema Caramizi Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

const int MAXC = (int) 1e6;
const int SIZE = (int) 2e5;

int fr[MAXC + 1];
long long sol1[MAXC + 1];
long long sol2[SIZE + 2];

int main() {
    FILE *fi, *fout;
    int i, n, m, l, c;
    fi = fopen("caramizi.in" ,"r");
    fout = fopen("caramizi.out" ,"w");
    fscanf(fi,"%d %d " ,&n,&m);
    for(i = 1; i <= n; i++) {
        fscanf(fi,"%d " ,&c);
        fr[c]++;
    }
    long long s = 0;
    int p = 0;
    for(i = 1; i <= MAXC; i++) {
        p += fr[i];
        s += 1LL * i * fr[i];
        sol1[i] = std::max(sol1[i - 1], 1LL * (s / i) * i + 1LL * (n - p) * i);
    }
    for(i = SIZE; i >= 1; i--)
        sol2[i] = std::max(sol2[i + 1], (s / i) * i);
    for(i = 1; i <= m; i++) {
        fscanf(fi,"%d " ,&l);
        if(l <= MAXC)
            fprintf(fout,"%lld\n" ,sol1[l]);
        else
            fprintf(fout,"%lld\n" ,sol2[(s + l - 1) / l]);
    }
    fclose(fi);
    fclose(fout);
    return 0;
}