Cod sursa(job #749564)

Utilizator danalex97Dan H Alexandru danalex97 Data 17 mai 2012 18:29:36
Problema Caramizi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <algorithm>
#include <cstdio>

#define INF 1000005
#define DIM 200005

#define ll long long
using namespace std;

ll Rez[INF],Size[INF];
ll Sum=-1;

int A[DIM];
int N,M,x;

int main()
{
    freopen ("caramizi.in","r",stdin);
    freopen ("caramizi.out","w",stdout);
    
	scanf ("%d%d",&N,&M);
    for (int i=1; i<=N; ++i)
		scanf ("%d",&A[i]);
    A[0]=1,A[N+1]=INF;
	
    sort (A+1,A+N+1);
  
    for (int i=0; i<=N; ++i)
	{
		Sum+=A[i];
        for (ll j= A[i]  ; j<A[i+1]; ++j)
            Rez[j]=max (Rez[j-1], Sum-Sum%j+(N-i)*j);
    }
	for (ll i=Sum/A[N]; i; --i)
        Size[i]=max (Sum-Sum%i,Size[i+1]);

	for (int i=1; i<=M; ++i )
	{
		scanf ("%d",&x)
		printf ("%lld\n",(x<INF) ? Rez[x] : Size[Sum/x+1]);
	}
}