Cod sursa(job #2705410)

Utilizator zerolightningIon Bobescu zerolightning Data 12 februarie 2021 16:07:17
Problema Subsecventa de suma maxima Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

void solve(vector<int> arr)
{
	vector<int> sumMaxes(N);
	sumMaxes[0] = arr[0];
	for (int i = 1; i < N; i++)
	{
		if (sumMaxes[i - 1] + arr[i] >= 0)
		{
			sumMaxes[i] = sumMaxes[i - 1] + arr[i];
		}
		else
		{
			sumMaxes[i] = arr[i];
		}
	}
	int ssMax = INT32_MIN;
	int ssEnd_Max = 0;
	int ssStart_Max = 0;
	int ssEnd = 0;
	int ssStart = 0;
	for (int i = 0; i < N; i++)
	{
		if (ssMax < sumMaxes[i])
		{
			ssMax = sumMaxes[i];
			ssStart_Max = ssStart;
			ssEnd_Max = ssEnd;
		}

		if (sumMaxes[i] < 0)
		{
			ssStart = i+1;
			ssEnd = i+1;
		}
		else
		{
			ssEnd++;
		}
	}
	g << ssMax << " " << ssStart_Max + 1 << " " << ssEnd_Max + 1;
}

int main()
{
	// Program
	f >> N;
	vector<int> arr(N);
	for (int i = 0; i < N; i++)
	{
		f >> arr[i];
	}
	solve(arr);

	// Exit
	f.close();
	g.close();
	return 0;
}