Cod sursa(job #1332015)

Utilizator RengelBotocan Bogdan Rengel Data 1 februarie 2015 15:40:20
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <limits.h>
#include <cstdio>

using namespace std;

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

	int X;

	int best_begin = -1;
	int best_end = -1;
	int best_sum = 0;

	int current_begin = -1;
	int current_sum = -1;

	int max_negative_value = INT_MIN;
	int max_negative_position = -1;

	int N; scanf("%d", &N);
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &X);

		if (X <= 0)
		{
			if (X > max_negative_value)
			{
				max_negative_value = X;
				max_negative_position = i;
			}
		}

		int candidate_sum;
		if (current_sum != -1)
		{
			candidate_sum = current_sum + X;
		}
		else
		{
			candidate_sum = X;
		}

		if (candidate_sum >= 0)
		{
			if (current_sum == -1)
			{
				current_begin = i;
			}
			current_sum = candidate_sum;
		}
		else
		{
			current_sum = -1;
		}

		if (current_sum > best_sum)
		{
			best_sum = current_sum;
			best_begin = current_begin;
			best_end = i;
		}
	}

	if (best_begin == -1)
	{
		printf("%d %d %d", max_negative_value, max_negative_position + 1, max_negative_position + 1);
	}
	else
	{
		printf("%d %d %d", best_sum, best_begin + 1, best_end + 1);
	}
	return 0;
}