Cod sursa(job #2274146)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 1 noiembrie 2018 14:27:56
Problema Subsecventa de suma maxima Scor 75
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>

using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
vector<int> v;
int n;
void citire()
{
	f >> n;
	int i;
	v.resize(n + 3);
	for (i = 1; i <= n; i++)
	{
		f >> v[i];
	}
	f.close();
}
int l = 0, r = 0;
long long int M = INT_MIN;
void divide(int left, int right)
{
	if (left == right)
	{
		if (M < v[left])
		{
			l = r = left;
			M = v[left];
		}
		return;
	}
	int mid = (left + right) / 2;
	divide(left, mid);
	divide(mid + 1, right);
	long long int r1 = 0, r2 = 0, s = 0, st=0, dr=0;
	int i;
	for (i = mid; i >= left; i--)
	{
		s += v[i];
		if (s > r1)
		{
			r1 = s;
			st = i;
		}
	}
	s = 0;
	for (i = mid + 1; i <= right; i++)
	{
		s += v[i];
		if (s > r2)
		{
			r2 = s;
			dr = i;
		}
	}
	if (r1 + r2 > M)
	{
		M = r1 + r2;
		l = st;
		r = dr;
	}
}
int main()
{
	citire();
	divide(1,n);
	g << M << " " << l << " " << r << "\n";
	g.close();
	return 0;
}