Cod sursa(job #778369)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 14 august 2012 16:13:02
Problema Euro Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>

#define MAXN 35000
#define per pair<long long, long long>

using namespace std;

long long A[MAXN];
long long s;
int i, j, N;
long long T;
per a,b;

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

	scanf("%d %lld",&N,&T);
	for (i=1; i<=N; ++i)
		scanf("%lld",A+i);
	
	vector<per> Q;
	for (i=1; i<=N;){
		s=0;
		while (s>=0 && i<=N){
			s+=A[i]*1LL;
			++i;
		}

		Q.push_back( make_pair(s, i-1) );
	}

	memset(A, 0, sizeof(A));

	N = Q.size();
	A[0] = 0;
	for (i=0; i<N; ++i){
		a = Q[i];
		A[i+1] = A[i] + a.first * a.second - T;
		for (j=i-1; j>=0 && (j-i)*(j-i) <= T+100; --j){
			a.first += Q[j].first;
			A[i+1] = max(A[i+1], A[j]+a.first*a.second-T);
		}
	}

	printf("%lld\n", A[N]);

	return 0;
}