Cod sursa(job #270764)

Utilizator scvalexAlexandru Scvortov scvalex Data 4 martie 2009 15:56:50
Problema Subsecventa de suma maxima Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.68 kb
#include <stdio.h>

int N;
int A[6000000];
int S[6000000], M[6000000];

int main(int argc, char *argv[]) {
	int i, ss, se, sm;

	FILE *fi = fopen("ssm.in", "r");
	fscanf(fi, "%d", &N);
	for (i = 0; i < N; ++i)
		fscanf(fi, "%d", A+i);
	fclose(fi);

	S[0] = A[0];
	M[0] = 0;
	for (i = 0; i < N; ++i) {
		S[i] = S[i-1] + A[i];
		if (S[M[i-1]] > S[i])
			M[i] = i;
		else
			M[i] = M[i-1];
	}

	sm = 1<<31;
	ss = se = 0;
	for (i = 0; i < N; ++i) {
		//printf("%d-%d: %d\n", M[i]+1, i, S[i]-S[M[i]]);
		if (S[i] - S[M[i]] > sm) {
			sm = S[i] - S[M[i]];
			ss = M[i]+1;
			se = i;
		}
	}

	FILE *fo = fopen("ssm.out", "w");
	fprintf(fo, "%d %d %d\n", sm, ss+1, se+1);
	fclose(fo);

	return 0;
}