Cod sursa(job #26117)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 5 martie 2007 10:56:36
Problema Buline Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>
#define FIN "buline.in"
#define FOUT "buline.out"
#define MAX 200001
#define inf 0x3f3f3f

long A[MAX], S[MAX], T[MAX];
long N;
long Max = -inf, P=inf, L = inf;

int main() {
	long i, x;

	freopen(FIN, "r", stdin);
	scanf("%ld", &N);
	long Sum = 0;
	S[0] = 0; T[0] = -inf;
	for (i=1; i<=N; ++i) {
		scanf("%ld %ld", A+i, &x);
		if ( x==0 ) 
			A[i] *= -1;
		S[i] = S[i-1] + A[i];
		T[i] = ( T[i-1] > S[i] ) ? T[i-1] : S[i];

		Sum = ( Sum + A[i] > A[i] ) ? Sum+A[i] : A[i];
		if ( Max < Sum ) {
			Max = Sum;
		}
	}
	fclose(stdin);

	for (i=2; i<=N; ++i)
		if ( Max < S[N] - S[i-1] + T[i-1] ) 
			Max = S[N] - S[i-1] + T[i-1];

	freopen(FOUT, "w", stdout);
	printf("%ld %ld %ld\n", Max, P, L);
	fclose(stdout);
	return 0;
}