Cod sursa(job #458247)

Utilizator tomescu_alinTomescu Alin tomescu_alin Data 24 mai 2010 09:48:22
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>

using namespace std;

void maxSubarraySum(long * array, unsigned long n, unsigned long& start, unsigned long& end, long& maxSum)
{
	long currentSum = 0;
	
	maxSum = array[0];
	unsigned long possibleStart = 0;
	start = 0;
	end = -1;
	
	for(unsigned long i = 0; i < n; i++)
	{
		if(currentSum < 0)
			possibleStart = i;
		
		currentSum = std::max(currentSum + array[i], array[i]);
		
		if(currentSum > maxSum)
		{
			maxSum = currentSum;
			start = possibleStart;
			end = i;
		}
	}
}

int main()
{
	const char * inFile = "ssm.in";
	const char * outFile = "ssm.out";
	
	ifstream fin(inFile);
	ofstream fout(outFile);
	
	unsigned long n;
	fin >> n;
	
	long * a = new long[n];
	for(unsigned long i = 0; i < n; i++)
	{
		fin >> a[i];
	}
	
	long sum;
	unsigned long i, j;
	
	maxSubarraySum(a, n, i, j, sum);
	
	fout << sum << " " << i + 1 << " " << j + 1;
	
	delete [] a;
	
	fout.close();
	fin.close();
	
	return 0;	
}