Cod sursa(job #253897)

Utilizator raduzerRadu Zernoveanu raduzer Data 6 februarie 2009 13:26:30
Problema Caramizi Scor 5
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 1 Marime 0.84 kb
#include <cstdio>
#include <algorithm>
using namespace std;

const int MAX_N = 10010;
const int MAX_L = 10000;

int n, m, mx;
int a[MAX_N], b[MAX_N], par[MAX_N];
long long c[MAX_L];
long long sum;

int main()
{
	int i, j;
	freopen("caramizi.in", "r", stdin);
	freopen("caramizi.out", "w", stdout);
	
	scanf("%d %d", &n, &m);
	
	for (i = 1; i <= n; ++i) { scanf("%d", &a[i]); sum += a[i]; par[i] = par[i - 1] + a[i]; }
	sort(a + 1, a + n + 1);
	for (i = 1; i <= m; ++i) 
	{
		scanf("%d", &b[i]);
		if (b[i] > mx) mx = b[i];
	}
	
	for (i = 1; i <= mx; ++i)
	{
		long long sol = 0, s = 0;
		for (j = n; j > 0; --j)
		{
			if (a[j] < i) s += i - a[j];

			if (par[j - 1] >= s) sol = (long long)(n - j + 1) * i;
		}
		c[i] = (sol > c[i - 1]) ? sol : c[i - 1];
	}
	
	for (i = 1; i <= m; ++i) 
		printf("%lld\n", c[b[i]]);
}