Cod sursa(job #1499318)

Utilizator o_micBianca Costin o_mic Data 10 octombrie 2015 14:55:11
Problema Subsecventa de suma maxima Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 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;
	if(left < mid){
		int maxl = ssm(left, mid-1, li, ri);
		if(maxl > maxx) {
			maxx = maxl;
			l = li;
			r = ri;
		}
	}
	if(mid < right){
		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;
}