Cod sursa(job #1196724)

Utilizator tudormaximTudor Maxim tudormaxim Data 8 iunie 2014 23:59:12
Problema Euro Scor 85
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.9 kb
#include <cstdio>
#include <iostream>
#define maxn 35001
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
int n, T, N, A[maxn], day[maxn],i;
ll D[maxn];
int main ()
{
    freopen("euro.in","r",stdin);
    freopen("euro.out","w",stdout);
	cin>>n>>T;
	int x, s=0;
	for(i = 1 ; i <= n ; ++i)
    {
        cin >> x;
		s += x;
		if(s < 0)
		{
			A[++N] = s;
            day[N] = i;
			s = 0;
		}
		else
        {
			if(i==n)
			{
				A[++N] = s;
                day[N] = i;
			}
		}
	}
	int sqrtT = 0;
	while((sqrtT + 1) * (sqrtT + 1) <= T )
            ++sqrtT;

	sqrtT += 2;
	for(int i = 1 ; i <= N ; ++i )
	{
		D[i] = -INF;

		int s = 0;
		for(int j = i ; i - j <= sqrtT && j > 0 ; --j)
		{
			s += A[j];

			long long now = D[j-1] + 1LL * s * day[i];
			if(D[i] < now)
				D[i] = now;

		}
		D[i] -= T;
	}
	cout << D[N] << "\n";

	return 0;
}