Cod sursa(job #2021464)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 13 septembrie 2017 18:55:56
Problema Caramizi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <bits/stdc++.h>

#define MaxN 1000005
#define INF 2140000000

using namespace std;

FILE *IN,*OUT;

int N,M,P=0,X,cnt[MaxN],Max=0;
long long d1[MaxN],S=0,d2[MaxN];
int main()
{
    IN=fopen("caramizi.in","r");
    OUT=fopen("caramizi.out","w");

    fscanf(IN,"%d%d",&N,&M);

    for(int i=1;i<=N;i++)
    {
        fscanf(IN,"%d",&X);
        cnt[X]++;
        Max=max(Max,X);
    }

    for(int i=1;i<=1e6;i++)
    {
        P+=cnt[i];
        S+=1LL*cnt[i]*i;
        d1[i]=max(d1[i-1],1LL*(S/i+N-P)*i);
    }

    for(int i=S/Max;i>0;i--)
        d2[i]=max(d2[i+1],S-S%i);

    for(int i=1;i<=M;i++)
    {
        fscanf(IN,"%d",&X);
        if(X<=1e6)
            fprintf(OUT,"%lld\n",d1[X]);
        else fprintf(OUT,"%lld\n",d2[S/X+1]);
    }
    return 0;
}