Cod sursa(job #3146826)

Utilizator radu.z5Zamfirescu Radu Ioan radu.z5 Data 22 august 2023 17:15:29
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>

using namespace std;


void calculate(vector<int> &v, int &best_start, int &best_end, int &max_sum)
{
	int n = (int) v.size();

	max_sum = v[0];

	// suma de la pasul i - 1 pe care incerc sa o maresc cu v[i]
	int sum = 0;

	// indicele de start al primului termen care formeaza suma de mai sus;
	// in bucla de mai jos, i va fi indicele ultimului
	int start = 0;

	best_start = best_end = 0;

	for (int i = 1; i < n; i++) {
		if (sum >= 0) {
			// cresc suma subsecventei cercetata curent
			sum += v[i];
		} else {
			// ma apuc de verificat o noua subsecventa
			sum = v[i];
			start = i;
		}

		if (sum > max_sum) {
			best_start = start;
			best_end = i;
			max_sum = sum;
		}
	}
}


int main(void)
{
	ifstream in("ssm.in");
	int n;

	in >> n;

	vector<int> v(n);

	for (int i = 0; i < n; i++)
		in >> v[i];

	in.close();
	int start, end, max_sum;

	calculate(v, start, end, max_sum);

	ofstream out("ssm.out");

	out << max_sum << ' ' << start + 1 << ' ' << end + 1;
	out.close();

	return 0;
}