Cod sursa(job #1196725)

Utilizator tudormaximTudor Maxim tudormaxim Data 9 iunie 2014 00:04:04
Problema Euro Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.1 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];
long long 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;
}