Cod sursa(job #3242161)

Utilizator Commander_XDunel Stefan-Octavian Commander_X Data 9 septembrie 2024 16:31:03
Problema Buline Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
//https://www.infoarena.ro/problema/buline
#include <fstream>

std::ifstream fin("buline.in");
std::ofstream fout("buline.out");

using namespace std;

int main()
{
	long long int total = 0, n = 0, x = 0, semn = 0, maxim = -9223372036854775807, minim = 9223372036854775807, max_L = 0, max_R = 0, min_L = 0, min_R = 0, sum_min = 0, sum_max = 0, max_l = 1, max_r = 1, min_l = 1, min_r = 1;
	fin >> n >> x >> semn;
	if (!semn)
		x *= -1;
	maxim = x;
	minim = x;
	sum_max = x;
	sum_min = x;
	total += x;
	for (int i = 1; i < n; ++i)
	{
		fin >> x >> semn;
		if (!semn)
			x *= -1;
		if (sum_max + x > x)
		{
			sum_max += x;
			max_r++;
		}
		else
		{
			sum_max = x;
			max_l = i + 1;
			max_r = i + 1;
		}
		if (sum_min + x < x)
		{
			sum_min += x;
			min_r++;
		}
		else
		{
			sum_min = x;
			min_l = i + 1;
			min_r = i + 1;
		}
		if (sum_max > maxim)
		{
			maxim = sum_max;
			max_L = max_l;
			max_R = max_r;
		}
		if (sum_min < minim)
		{
			minim = sum_min;
			min_L = min_l;
			min_R = min_r;
		}
		total += x;
	}
	if (maxim > (total - minim))
		fout << maxim << ' ' << max_L << ' ' << max_R - max_L + 1;
	else
		fout << total - minim << ' ' << min_R + 1 << ' ' << n - min_R + min_L - 1;

}