Cod sursa(job #2373609)

Utilizator Cojocaru_Andrei_CristianCojocaru Andrei Cristian Cojocaru_Andrei_Cristian Data 7 martie 2019 14:32:39
Problema Caramizi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>
using namespace std;


const int Lma = 1000000;
int f[Lma+5];
long long dp[Lma+5],cp[Lma+5];
int main()
{
    ifstream cin("caramizi.in");
    ofstream cout("caramizi.out");
    int n, m,x,ma=-1;
    cin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        cin>>x;
        ++f[x];
        if(x>ma)
            ma=x;
    }
    long long smax = 0;
    int k = 0;
    for(int i=1;i<=Lma;i++)
    {
        smax=smax+f[i]*i;
        k+=f[i];
        dp[i]=max(dp[i-1],smax-smax%i+1LL*(n-k)*i);
    }
    for(int i=smax/ma;i>=1;i--)
        cp[i]=max(cp[i+1],smax-smax%i);
    for(int i=1;i<=m ; ++i)
    {
        cin>>x;
        if(x<=Lma)
            cout<<dp[x]<<"\n";
        else
            cout<<cp[smax / x + 1]<<"\n";
    }
    return 0;
}