Cod sursa(job #749568)

Utilizator danalex97Dan H Alexandru danalex97 Data 17 mai 2012 18:32:33
Problema Caramizi Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <algorithm>
#include <cstdio>

#define INF 1000005
#define DIM 200005

#define max(a,b) ( (a>b) ? a : b )
#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 (int i=Sum/A[N]; i; --i)
        Size[i]=max (Sum-Sum%i,Size[i+1]);

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