Cod sursa(job #26718)

Utilizator MariusMarius Stroe Marius Data 5 martie 2007 20:43:52
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
using namespace std;

const char iname[] = "buline.in";
const char oname[] = "buline.out";

#define MAX_N 200005

int A[MAX_N], S[MAX_N], T[MAX_N];

int main(void) {
	freopen(iname, "r", stdin);
	int n;
	int i;
	int color;
	for (scanf("%d", & n), i = 1; i <= n; ++ i) {
		scanf("%d %d", A + i, & color);
		if (color == 0)
			A[i] = - A[i];
		S[i] = S[i - 1] + A[i];
		T[i] = T[i - 1];
		if (T[i] < S[i])
			T[i] = S[i];
	}
	int res = A[1];
	int sum = 0;
	for (i = 1; i <= n; ++ i) {
		if (sum + A[i] > A[i])
			sum = sum + A[i];
		else
			sum = A[i];
		if (res < sum)
			res = sum;
	}
	for (i = 1; i <= n; ++ i) {
		if (res < S[n] - S[i] + T[i - 1])
			res = S[n] - S[i] + T[i - 1];
	}
	freopen(oname, "w", stdout);
	printf("%d 0 0\n", res);
	return 0;
}