Cod sursa(job #503690)

Utilizator toniobFMI - Barbalau Antonio toniob Data 24 noiembrie 2010 14:11:55
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
using namespace std;

ifstream in ("buline.in");
ofstream out ("buline.out");

const int N = 1 << 19;
int n, v[N], sumatut;

void sminima (int& smin, int& stmin, int& drmin) {
	int sc = v[1], st = 1;
	for (int i = 2; i <= n; ++i) {
		if (sc > 0) {
			sc = v[i];
			st = i;
		}
		
		if (sc < smin) {
			smin = sc;
			stmin = st;
			drmin = i;
		}
	}
}

void smaxima (int& smax, int& stmax, int& drmax) {
	int sc = v[1], st = 1;
	for (int i = 2; i <= n; ++i) {
		if (sc < 0) {
			sc = v[i];
			st = i;
		}
		
		if (sc > smax) {
			smax = sc;
			stmax = st;
			drmax = i;
		}
	}
}

void citire () {
	in >> n;
	for (int i = 1, x; i <= n; ++i) {
		in >> v[i] >> x;
		v[i] = !x ? -v[i] : v[i];
		v[n + i] = v[i];
		sumatut += v[i];
	}
}

void afisare () {
	int smin, smax, drmin, stmin, stmax, drmax;
	
	sminima (smin, stmin, drmin);
	smaxima (smax, stmax, drmax);
	
	if (smax > sumatut - smin) {
		out << smax << ' ' << stmax << ' ' << drmax - stmax + 1;
	} else {
		out << sumatut - smin << ' ' << drmin + 1 << ' ' << n - drmin + stmin - 1;
	}
}

int main () {
	citire ();
	
	afisare ();
	
	return 0;
}