Cod sursa(job #2568337)

Utilizator CriviCriveanu Bogdan Crivi Data 3 martie 2020 22:07:14
Problema Subsecventa de suma maxima Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in;
ofstream out;

/*
in vect sol pe sol[i].first avem suma maxima pana
la pozitia i, iar pe sol[i].second avem pozitia
de inceput a secventei maxima
*/
vector<pair<int, int>> sol;


vector<int> v;

int inc, fin, max1= -INT_MAX, n, s, x;

void kadane()
{
	in >> n;
	in >> x;
	sol.resize(n);
	inc = fin = sol[0].second = 0;
	max1 = sol[0].first = x;
	for (int i = 1; i < n; i++)
	{
		in >> x;
		if (sol[i - 1].first + x > x)
		{
			sol[i].first = sol[i - 1].first + x;
			sol[i].second = sol[i - 1].second;
		}
		else
		{
			sol[i].first = x;
			sol[i].second = i;
		}
		if (sol[i].first > max1)
		{
			inc = sol[i].second;
			fin = i;
			max1 = sol[i].first;
		}
	}
}

int main()
{
	in.open("ssm.in");
	out.open("ssm.out");

	kadane();

	out << max1 << " " << inc + 1 << " " << fin + 1;
}