Cod sursa(job #942494)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 22 aprilie 2013 19:25:20
Problema Euro Scor 10
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.91 kb
#include<fstream>
#define maxn 35000

using namespace std;

ifstream fin("euro.in"); ofstream fout("euro.out");

int n, T, N;
int A[maxn], day[maxn];
int D[maxn];

const long long INF = 1LL<<62;

int main ()
{
	fin >> n >> T;

	int x, s = 0;

	for(int i = 1 ; i <= n ; ++i)
    {
        fin >> 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;
	}

	fout << D[N] << "\n";

    fin.close(); fout.close();
	return 0;
}