Cod sursa(job #2433497)

Utilizator Mihai7Gheoace Mihai Mihai7 Data 27 iunie 2019 16:59:37
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.97 kb
// Copyright Gheoace Mihai, 27.06.2019

#pragma warning(disable : 4996)

#include <cstdio>
#include <vector>

using namespace std;

template < class T>
class Pair {
	T first;
	T second;
public:
	Pair() {};
	Pair(T const& x, T const& y) {
		first = x;
		second = y;
	}
	Pair(Pair<T> const& cp) {
		first = cp.getFirst();
		second = cp.getSecond();
	}

	T const getFirst() const {
		return first;
	}

	T const getSecond() const {
		return second;
	}
};

char buff[4096];
int pos = 4096;

char my_getch()
{
	if (pos == 4096)
	{
		fread(buff, 1, 4096, stdin);
		pos = 0;
	}
	return buff[pos++];
}
int nextNumber()
{
	char c = my_getch(); int sign = 0;
	while (c<'0' || c>'9')
	{
		if (c == '-')
			sign = 1;
		c = my_getch();
	}
	int nr = 0;
	while (c >= '0' && c <= '9')
	{
		nr = nr * 10 + c - '0';
		c = my_getch();
	}
	if (sign)
		nr *= -1;
	return nr;
}

class Solution {
	int n;
	vector<int> v;
	int index[4];
	Pair<int> indexSol;
	
public:
	int SSM() {
		int dp[4];    // vector cu n + 1 elemente (indexarea incepe de la 0)
								// am nevoie de dp[1], ..., dp[n]
		n = nextNumber();
								  // caz de baza
		dp[0] = nextNumber();
		index[0] = 1;
		int sol = dp[0];
		indexSol = Pair<int>(index[1], 1);

		// caz general
		for (int i = 1; i < n; ++i) {
			if (dp[(i - 1) % 3] >= 0) {
				// extinde la dreapta cu v[i]
				dp[i % 3] = dp[(i - 1) % 3] + nextNumber();
				index[i % 3] = index[(i-1) % 3];
			}
			else {
				// incep o noua secventa
				dp[i % 3] = nextNumber();
				index[i % 3] = i + 1;
			}
			if (dp[i % 3] > sol) {
				sol = dp[i % 3];
				indexSol = Pair<int>(index[i % 3], i + 1);
			}
		}
		return sol; // aceasta este suma asociata cu SSM
	}

	void print() {
		freopen("ssm.out", "w", stdout);
		int ans = SSM();
		printf("%d %d %d\n", ans, indexSol.getFirst(), indexSol.getSecond());
	}
};



int main() {
	freopen("ssm.in", "r", stdin);

	Solution sol;
	sol.print();
}