Cod sursa(job #2909105)

Utilizator MihaiSimedreaSimedrea Mihai MihaiSimedrea Data 9 iunie 2022 13:07:23
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <climits>

using namespace std;

ifstream fin("ssm.in");
ofstream fout("ssm.out");

void readData(int &N, vector<int> &numbers)
{
	fin >> N;
	int aux;

	for(auto i = 0; i < N; i++)
	{
		fin >> aux;
		numbers.push_back(aux);
	}
}

int main()
{
	int N = 0;
	vector<int> numbers;
	int currentIndex = 1;

	readData(N, numbers);

	int maxSoFar = INT_MIN;
	int endMax = 0;
	int start = 0, end = 0, potentialStart = 0;

	for(auto number = numbers.cbegin(); number < numbers.cend(); number++)
	{
		endMax += *number;

		if(maxSoFar < endMax)
		{
			maxSoFar = endMax;
			start = potentialStart;
			end = currentIndex;
		}

		if(endMax < 0)
		{
			endMax = 0;
			potentialStart = currentIndex + 1;
		}

		currentIndex += 1;
	}

	fout << maxSoFar << ' ' << start << ' ' << end << endl;

	fin.close();
	fout.close();
	return 0;
}