Cod sursa(job #491583)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 11 octombrie 2010 20:08:13
Problema Caramizi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

#define NM 200005

int N, M, C[NM], LMAX;
long long SUM[NM], ANS[NM][3], FANS[NM][3];

vector < pair<int, int> > Q;

void read_and_process_data()
{
	int q;
	
	scanf ("%d %d", &N, &M);
	
	for (int i = 1; i <= N; ++i) scanf ("%d", &C[i]);
	for (int i = 1; i <= M; ++i) 
	{	
		scanf ("%d", &q);
		LMAX = max(LMAX, q);
		Q.push_back(make_pair(q,i));
	}	
	
	sort (C + 1, C + N + 1);
	sort (Q.begin(), Q.end());
	
	/*
	for (int i = 1; i <= N; ++i) printf ("%d ", C[i]);
	printf ("\n");
	for (int i = 1; i <= M; ++i) printf ("%d ", Q[i]);
	*/
	
	//LMAX = Q[M - 1].first;
	
	for (int i = 1; i <= N; ++i) SUM[i] = SUM[i - 1] + C[i];
}

void solve0()
{
	for (int l = 1; l <= LMAX; ++l)
	{
		long long tot = 0;
		
		for (int i = 1; i <= N; ++i) tot += min(C[i], l);
		
		long long ansc = tot/l;
		ansc *= l;
		ANS[l][0] = max(ANS[l - 1][0], ansc);
	}	
	
	for (int i = 0; i < M; ++i) FANS[Q[i].second][0] = ANS[Q[i].first][0];
	
	for (int i = 1; i <= M; ++i) printf ("%lld\n", FANS[i][0]);
}

int main()
{
	freopen ("caramizi.in", "r", stdin);
	freopen ("caramizi.out", "w", stdout);
	
	read_and_process_data();

	solve0();	
	//solve1();
	//solve2();

	
	
	return 0;
}