Cod sursa(job #1452423)

Utilizator cristid9Cristi D cristid9 Data 20 iunie 2015 20:16:59
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <vector>

std::vector<int> MaxSubarray(int array[], int size)
{
	int maxSoFar = 0;
	int maxEndingHere = 0;
	int start = 0;
	int bestStart = 0;
	int stop = -1;

	for(int i = 0; i < size; i++)
	{
		maxEndingHere += array[i];
		if(maxEndingHere < 0)
		{
			maxEndingHere = 0;
			start = i + 1;
		}

		if(maxSoFar < maxEndingHere)
		{
			maxSoFar = maxEndingHere;
			bestStart = start;
			stop = i;
		}
	}

	std::vector<int> retval {maxSoFar, bestStart, stop};
	return retval;
}


int main()
{
	std::ifstream fin("ssm.in");
	std::ofstream fout("ssm.out");

	int size;
	int* array;

	fin >> size;
	array = new int[size];
	for(int i = 0; i < size; i++)
		fin >> array[i];


	auto result = MaxSubarray(array, size);
	fout << result[0];
	fout << " " << result[1] + 1;
	fout << " " << result[2] + 1; 
	fout << std::endl;

	fin.close();	
	fout.close();

	return 0;
}