Cod sursa(job #2026330)

Utilizator giotoPopescu Ioan gioto Data 24 septembrie 2017 12:27:24
Problema Caramizi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <bits/stdc++.h>
using namespace std;

int n, m;
const int Lmax = 1000000;
int f[Lmax + 5];
long long d[Lmax + 5];
int main()
{
    freopen("caramizi.in", "r", stdin);
    freopen("caramizi.out", "w", stdout);
    scanf("%d%d", &n, &m);
    int x, Max = 0;
    for(int i = 1; i <= n ; ++i){
        scanf("%d", &x);
        ++f[x];
        if(x > Max) Max = x;
    }
    long long Sum = 0;
    int k = 0;
    for(int i = 1; i <= Lmax ; ++i){
        Sum = Sum + f[i] * i;
        k += f[i];
        d[i] = max(d[i - 1], Sum - Sum % i + 1LL * (n - k) * i);
    }
    for(int i = 1; i <= m ; ++i){
        scanf("%d", &x);
        if(x <= Lmax) printf("%lld\n", d[x]);
        else printf("%lld\n", Sum - Sum % (Sum / x));
    }
    return 0;
}