Cod sursa(job #417587)

Utilizator deeyameOsan Andreea Maria deeyame Data 14 martie 2010 16:10:39
Problema Subsecventa de suma maxima Scor 85
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");

const int MAX = 7000005;
const int MIN = -7000005;
int S[MAX], n, S_max = MIN, beg, end;
void DEI(int l, int r);
int main()
{
	fin >> n;
	for( int i = 1; i <= n; ++i )
		fin >> S[i];
	DEI( 1, n );
	fout << S_max << ' ' << beg << ' ' << end << '\n';
	fin.close();
	fout.close();
	return 0;
}

void DEI( int l, int r )
{
	if( l == r )
	{
		if( S_max < S[r] )
			S_max = S[r], beg = end = r;
		return;
	}
	int mj = (r + l) / 2;
	DEI( l, mj );
	DEI( mj + 1, r );
	int suf = 0, pre = 0, left, right;
	int maxSuf = MIN, maxPre = MIN;
	for ( int i = mj; i >= l; -- i ) 
	{
		suf += S[i];
		if ( maxSuf <= suf )  maxSuf = suf, left = i;
	}
	for ( int i = mj + 1; i <= r; ++ i )
	{
		pre += S[i];
		if ( maxPre < pre )  maxPre = pre, right = i;
		
	}
	if ( maxPre + maxSuf > S_max )
		S_max = maxPre + maxSuf, beg = left, end = right;
}