Cod sursa(job #2377211)

Utilizator mihai.constantinConstantin Mihai mihai.constantin Data 8 martie 2019 23:27:49
Problema Subsecventa de suma maxima Scor 85
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

#define dmax 6000002

int N;
int v[dmax], bst[dmax];

int main(void) {

	freopen("ssm.in", "r", stdin);
	freopen("ssm.out", "w", stdout);

	int i, maxim, left, right, idx;

	scanf("%d", &N);
	for(i = 1; i <= N; i++) {
		scanf("%d", &v[i]);
	}

	bst[1] = v[1];
	maxim = bst[1];
	left = right = 1;
	for(i = 2; i <= N; i++) {
		// bst[i] = max(bst[i - 1] + v[i], v[i]);

		if(bst[i - 1] < 0) {
			idx = i;
		}

		bst[i] = v[i];
		if(bst[i - 1] + v[i] > bst[i]) {
			bst[i] = bst[i - 1] + v[i];
		}

		if(maxim < bst[i]){
			maxim = bst[i];
			left = idx;
			right = i;
		}
	}

	printf("%d %d %d\n", maxim, left, right);

	return 0;
}