Cod sursa(job #2087623)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 13 decembrie 2017 21:35:22
Problema Caramizi Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<bits/stdc++.h>
#define ross 1000002
using namespace std;
ifstream f("caramizi.in");
ofstream g("caramizi.out");
int n,m,nr,frq[ross],maxx;
long long s,max1[ross],ct,cp[ross];
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
        f>>nr,frq[nr]++,maxx=max(maxx,nr);
    ct=0;
    for(int i=1;i<=maxx;++i)
    {
        max1[i]=max1[i-1];
        ct+=frq[i];
        s+=1ll*frq[i]*i;
        max1[i]=max(max1[i],1ll*(n-ct)*i+s-s%i);
    }
    s+=1ll*frq[maxx]*maxx;
    for(long long i=maxx+1;i<=ross;++i)
        max1[i]=max(max1[i-1],s-s%i);
    for(int i=s/maxx;i>=1;--i)
        cp[i]=max(cp[i+1],s-s%i);
    for(int i = 1;i<=m;++i){
        int x;
        f>>x;
        if(x<=ross)
            g<<max1[x]<<'\n';
        else
            g<<cp[s/x+1]<<'\n';
    }
    return 0;
}