Cod sursa(job #255162)

Utilizator CezarMocanCezar Mocan CezarMocan Data 8 februarie 2009 19:01:52
Problema Caramizi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <cstdio>
#include <algorithm>
#define maxn 200010

using namespace std;

int n, m, i, j, l, ct, mq, nr;
int v[maxn], q[maxn];
long long t[1000001], tot, sum, s, dmax;

int main() {
	freopen("caramizi.in", "r", stdin);
	freopen("caramizi.out", "w", stdout);
	
	scanf("%d%d", &n, &m);
	
	for (i = 1; i <= n; i++) 
		scanf("%d", &v[i]);
	
	sort(v + 1, v + n + 1);
	
	for (i = 1; i <= m; i++) 
		scanf("%d", &q[i]);
	
	mq = 1000000;
	i = 1; sum = 0;
	for (l = 1; l <= mq; l++) {
		while (v[i] < l && i <= n) {
			sum += v[i];
			i++;
		}
		ct = n - i + 1;
		tot = (1LL * l * ct) + sum;
		t[l] = tot / l;		
		t[l] *= l;
		if (t[l - 1] > t[l])
		  t[l] = t[l - 1];
	}	

	for (i = 1; i <= m; i++) 
		printf("%lld\n", t[q[i]]);
	
	return 0;
}