Cod sursa(job #471809)

Utilizator vlad.maneaVlad Manea vlad.manea Data 21 iulie 2010 01:41:44
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <vector>

using namespace std;

int N;
int MAX, POS, LEN;
vector<int> Numbers;
int Max, LastMax;
int Len, LastLen;

void read()
{
	int x;

	ifstream fin("ssm.in");

	fin >> N;
	for (int i = 0; i < N; ++i)
	{
		fin >> x;
		Numbers.push_back(x);
	}

	fin.close();
}

void solve()
{
	LastMax = Numbers[N - 1];
	LastLen = 1;
	
	MAX = LastMax;
	LEN = LastLen;
	POS = N - 1;

	for (int i = N - 2; i >= 0; --i)
	{
		if (LastMax <= 0)
		{
			Max = Numbers[i];
			Len = 1;
		}
		else
		{
			Max = Numbers[i] + LastMax;
			Len = 1 + LastLen;
		}

		if (Max > MAX || Max == MAX && i < POS || Max == MAX && i == POS && Len < LEN)
		{
			MAX = Max;
			LEN = Len;
			POS = i;
		}

		LastMax = Max;
		LastLen = Len;
	}
}

void write()
{
	ofstream fout("ssm.out");

	fout << MAX << ' ' << (POS + 1) << ' ' << (POS + LEN) << '\n';

	fout.close();
}

int main()
{
	read();
	solve();
	write();

	return 0;
}