Cod sursa(job #775148)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 7 august 2012 13:30:49
Problema Buline Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<stdio.h>
#include<deque>

using namespace std;

#define MAXN 200002
#define INFINITE 999999999

deque < int > A;

int v[ 2 * MAXN ];
long long int s[ 2 * MAXN ], maxs = - (2 * INFINITE);
int n, i, x, beg, length, t;

int main()
{
	FILE *f = fopen("buline.in", "r");
	
	fscanf(f, "%d", &n);
	for(i = 1; i <= n; ++i)
	{
		fscanf(f, "%d %d", &v[i], &x);
		if(!x)
			v[i] = -v[i];
		v[i + n] = v[i];
	}
	
	t = 2 * n;
	
	
	for(i = 1; i <= t; ++i)
	{
		s[i] = v[i] + s[i-1];
		while(!A.empty() && s[i] <= s[ A.front() ])
			A.pop_front();
		A.push_front(i);
		if(i - A.back() + 1 > n)
			A.pop_back();
		if(s[i] - s[ A.back() ] > maxs)
			maxs = s[i] - s[ A.back() ], beg = A.back() + 1, length = i - A.back();
	}
			
	FILE *g = fopen("buline.out", "w");
	
	fprintf(g, "%lld %d %d\n", maxs, beg, length);

	fclose(g);
	
	return 0;
}