Cod sursa(job #2377194)

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

int main(void) {

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

	int N;

	scanf("%d", &N);
	vector <int> v(N + 1, 0);

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


	vector<int> bst(N + 1, 0);
	bst[1] = v[1];

	for(int i = 2; i <= N; i++) {
		if(bst[i - 1] < 0) {
			bst[i] = v[i];
		}
		else {
			bst[i] = bst[i - 1] + v[i];
		}
	}

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

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

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

	return 0;
}