Cod sursa(job #2377202)

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

#define dmax 6000005

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

int main(void) {

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

	int i;

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

	bst[1] = v[1];
	for(i = 2; i <= N; i++) {
		bst[i] = max(bst[i - 1] + v[i], v[i]);
	}

	int maxim = bst[1], right = 1;
	for(i = 2; i <= N; i++) {
		if(maxim < bst[i]) {
			maxim = bst[i];
			right = i;
		}
	}

	int s = 0, left = 0;
	for(i = right; i >= 1; i--) {
		s += v[i];
		if(s == maxim && v[i - 1] != 0) {
			left = i;
			break;
		}
	}

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

	return 0;
}