Cod sursa(job #2608754)

Utilizator michael_blazemihai mihai michael_blaze Data 1 mai 2020 18:28:31
Problema Subsecventa de suma maxima Scor 85
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
	
 
	
using namespace std;
	
 
	
int arr[6'000'005];
	
int n;
	
 
	
ifstream fin("ssm.in");
	
ofstream fout("ssm.out");
	
 
	
int bestSum = -214748368, Begin, End;
	
 
	
void maxSum(int left, int right) {
	
	if (left == right) {
	
		if (bestSum < arr[left]) {
	
			bestSum = arr[left];
	
			Begin = left;
	
			End = left;
	
		}
	
		return;
	
	}
	
	int sumRight = -214748368;
	
	int sumLeft  = -214748368;
	
	int sum = 0;
	
	int r, l;
	
	int mid = left + (right - left) / 2;
	
	
	
	maxSum(left, mid);
	
	maxSum(mid + 1, right);
	
	
	
	for (int i = mid;i >= left;i --) {
	
		sum += arr[i];
	
		if (sum >= sumRight) {
	
			sumRight = sum;
	
			r = i;
	
		}
	
	}
	
 
	
	sum = 0;
	
	for (int j = mid + 1;j <= right;j ++) {
	
		sum += arr[j];
	
		if (sum > sumLeft) {
	
			sumLeft = sum;
	
			l = j;
	
		}
	
	}	
	
 
	
	if (sumRight + sumLeft > bestSum) {
	
		bestSum = sumRight + sumLeft;
	
		Begin = r;
	
		End = l;
	
	}
	
}
	
int main() {
	
	fin >> n;
	
 
	
	for (int i = 0;i < n;i ++)
	
		fin >> arr[i];
	
 
	
	maxSum(0, n - 1);
	
 
	
	fout << bestSum << ' ' << Begin + 1 << ' ' << End + 1;
	
 
	
	return 0;
	
}