Cod sursa(job #1452446)

Utilizator cristid9Cristi D cristid9 Data 20 iunie 2015 21:47:14
Problema Subsecventa de suma maxima Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <climits>
#include <fstream>
#include <vector>

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

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

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

		if(maxElement < array[i])
		{
			maxElement = array[i];
			maxElementIndex = i;
		}
	}

	std::vector<int> retval;
	if(maxSoFar == 0)
		retval = {maxElement, maxElementIndex, maxElementIndex};
	else	
		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;
}