Cod sursa(job #2568272)

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

using namespace std;

ifstream in;
ofstream out;

vector<pair<int, int>> sol;
vector<int> v;

int inc, fin, max1;

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

int n;

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

	in >> n;
	for (int i = 0; i < n; i++)
	{
		int x;
		in >> x;
		v.push_back(x);
	}

	kadane();

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