Cod sursa(job #395956)

Utilizator alex23alexandru andronache alex23 Data 14 februarie 2010 09:32:28
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
/* 
 * File:   main.cpp
 * Author: alex
 *
 * Created on February 14, 2010, 9:08 AM
 */


#include <iostream>
#include <limits.h>
#include <fstream>

using namespace std;

ifstream f("ssm.in");
ofstream g("ssm.out");

int *a, N, li = 0, ls = 0, sMax = INT_MIN, sTemp = 0, liT = 0, lsT = 0;

int main()
{
	f >> N;
	a = new int[N];
	for (int i = 0; i < N; ++i)
	{
		f >> a[i];
	}
	f.close();


	for (int i = 0; i < N; ++i)
	{
		if (a[i] > 0)
		{
			sTemp += a[i];
		}
                else
		if (a[i] == 0)
		{
			if (sTemp > sMax)
			{
				li = liT, ls = i - 1, sMax = sTemp;
			}
		}
                else
		if (a[i] < 0)
		{
			if (a[i] + sTemp < 0)
			{
				if (a[i] > sMax)
				{
					li = liT, ls = i, sMax = a[i];
					liT = i + 1;
					sTemp = 0;
				}
				else
				{
					liT = i + 1;
					sTemp = 0;
				}
			}
			else
			{
				if (sTemp > sMax)
				{
					sMax = sTemp, li = liT, ls = i - 1;
				}
				if (a[i] + sTemp >= 0)
				{
					sTemp += a[i];
				}
			}
		}
	}

	if ((sTemp > sMax) && (sTemp != 0))
	{
		sMax = sTemp, li = liT, ls = N - 1;
	}
        
        g << sMax << " " << li + 1 << " " << ls + 1;
	g.close();

        delete[] a;
}