Cod sursa(job #2155594)

Utilizator AndreiBadescuBadescu Andrei-Octavian AndreiBadescu Data 7 martie 2018 22:43:16
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>

using namespace std;

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

int n, i, j, x, s, t, st, dr, ma = -(1 << 30) + 1, mi = (1 << 30) - 1;

inline void solve ()
{
	if ( t > ma )
	{
		ma = t;
		st = j + 1, dr = i;
	}
	else if ( t == ma && i - j <= dr - st )
		st = j + 1, dr = i;
}

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

	j = -1;
	ma = mi = s;

	for ( i = 1; i < n; ++i )
	{
		fin >> x;

		s += x;
		t = s - mi;

		if ( t  < 0 )
		{
			mi = s;
			j = i;

			if ( ma < 0 )
            {
                --j;
				solve();
            }
		}
		else
			solve();
	}

    solve();

    fout << ma << " " << st + 1 << " " << dr + 1;
}