Cod sursa(job #1499311)

Utilizator o_micBianca Costin o_mic Data 10 octombrie 2015 14:47:18
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

vector <int> v;

int ssm(int left, int right, int &l, int &r) {
	if(left == right)
		return v[left];
	int mid = (left + right) / 2;
	int sum = v[mid], maxx = v[mid];
	l = r = mid;
	for(int i = mid - 1; i >= left; --i){
		sum += v[i];
		if(sum > maxx){
			maxx = sum;
			l = i;
		}
	}
	sum = maxx;
	for(int i = mid + 1; i <= right; ++i) {
		sum += v[i];
		if(sum > maxx){
			maxx = sum;
			r = i;
		}
	}
	int li, ri;
	int maxl = ssm(left, mid-1, li, ri);
	if(maxl > maxx) {
		maxx = maxl;
		l = li;
		r = ri;
	}
	int maxr = ssm(mid+1, right, li, ri);
	if(maxr > maxx) {
		maxx = maxr;
		l = li;
		r = ri;
	}
	return maxx;
}

int main() {
	int n, x, l, r;
	ifstream fin("ssm.in");
	ofstream fout("ssm.out");
	fin >> n;
	for(int i = 0; i < n; ++i) {
		fin >> x;
		v.push_back(x);
	}
	fout << ssm(0, n-1, l, r) << " ";
	++l; ++r;
	fout << l << " " << r;
	return 0;
}