Cod sursa(job #751617)

Utilizator matei_cChristescu Matei matei_c Data 26 mai 2012 14:35:20
Problema Euro Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<cstdio>
#include<algorithm>
using namespace std;

const int MAX_N = 34568 ;
const long long INF = 1000000000000000000LL ;
const int MAX_EURO = 1000 ;

int n,t ;
long long sume[MAX_N] ;
long long neg[MAX_N],conv[MAX_N] ;
long long sol[MAX_N] ;

bool ok(int i,int j)
{
	return (i-j) * (i-j) <= t + MAX_EURO ;
}

int main()
{
	
	freopen("euro.in","r",stdin);
	freopen("euro.out","w",stdout);
	
	scanf("%d%d",&n,&t);
	int indice = 1 ;
	for(int i=1;i<=n;++i)
	{
		int x ;
		scanf("%d",&x);
		sume[i] = sume[i-1] + x ;
		if(neg[indice] < 0)
			++indice ;
		neg[indice] += x ;
		conv[indice] = i ;
	}
	
	for(int i=1;i<=indice;++i)
	{
		sol[i] = - INF ;
		for(int j=i;j>=0 && ok(i,j)==true;--j)
		{
			long long bani = sol[j] + ( sume[ conv[i] ] - sume [ conv[j] ] ) * conv[i] - t ;			
			sol[i] = max(sol[i] , bani) ;
		}	
	}	
	
	printf("%lld\n",sol[indice]);
	
	return 0;
	
}