Cod sursa(job #762138)

Utilizator RobertBBadea Corneliu Robert RobertB Data 28 iunie 2012 20:48:04
Problema Subsecventa de suma maxima Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("ssm.in");
ofstream g("ssm.out");

int v[6000001];
int n;
int sMax;
int L,R;

void F(int li, int ls)
{
	int l,r;
	int s1 = 0;
	int s2 = 0;
	int lMax = 0;
	int rMax = 01;
	int mid = (li + ls)/2;
	int i;
	if(li == ls) {
		if(sMax < v[li])
			sMax = v[li];
		return;
	}
	F(li,mid);
	F(mid+1,ls);
	for(i = mid; i >= li; i--) {
		s1 += v[i];
		if(lMax < s1) {
			lMax = s1;
			l = i;
		}
	}
	for(i = mid + 1; i <= ls; i++) {
		s2 += v[i];
		if(rMax <= s2) { 
			rMax = s2;
			r = i;
		}
	}
	if(sMax <= lMax + rMax) {
		sMax = lMax + rMax;
		L = l;
		R = r;
	}
}

int main()
{
	int i;
	f>>n;
	for(i = 1; i <= n; i++) {
		f>>v[i];
	}
	F(1, n);
	g<<sMax<<" "<<L<<" "<<R;
}