Cod sursa(job #1430878)

Utilizator GilgodRobert B Gilgod Data 8 mai 2015 21:42:45
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>

#define NMAX 6000000
#define max(a,b) ((a) > (b))?(a):(b)
#define NEGINF 0xff3f3f3f

const char IN[] = "ssm.in", OUT[] = "ssm.out";

using namespace std;

int N;
int v[NMAX];

inline void readData() {
	freopen(IN, "r", stdin);
	scanf(" %d", &N);
	for (int i = 0; i < N; ++i) scanf(" %d", &v[i]);
	fclose(stdin);
}

inline void ssm(int &bstart, int &bend, int &bmax) {
	int best_crt, start_seq, end_seq;
	bmax = NEGINF;
	best_crt = v[0];
	start_seq = end_seq = 0;
	for (int i = 1; i < N; ++i)  {
		if (v[i] <= best_crt + v[i]) {
			best_crt = best_crt + v[i];
			++end_seq;
		}
		else {
			best_crt = v[i];
			start_seq = end_seq = i;
		}
		if (best_crt > bmax) bmax = best_crt, bstart = start_seq, bend = end_seq;
	}
}

int main() {
	readData();
	int st, en, sum;
	ssm(st, en, sum);
	freopen(OUT, "w", stdout);
	printf("%d %d %d\n", sum, st+1, en+1);
	fclose(stdout); 
	return 0;
}