Cod sursa(job #1978342)

Utilizator mouse_wirelessMouse Wireless mouse_wireless Data 7 mai 2017 15:27:55
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cstring>
using namespace std;
typedef long long LL;

#ifdef INFOARENA
#define ProblemName "secv2"
#endif

#define MCONCAT(A, B) A B
#ifdef ProblemName
#define InFile MCONCAT(ProblemName, ".in")
#define OuFile MCONCAT(ProblemName, ".out")
#else
#define InFile "fis.in"
#define OuFile "fis.out"
#endif

#define MAXN 6000010
int v[MAXN];
int left, right;

#define UPDATE() {\
if (!rs || ans > res) {\
	res = ans;\
	rl = cl;\
	rr = cr;\
	rs = true;\
}\
}\

int main() {
	assert(freopen(InFile, "r", stdin));
	assert(freopen(OuFile, "w", stdout));
	int N;
	scanf("%d", &N);
	LL ans = 0, res = 0;
	int rl, rr, cl = 0;
	bool rs = false;
	for (int cr = 0; cr < N; ++cr) {
		scanf("%d", &v[cr]);
		ans += v[cr];
		while ((ans < 0 || v[cl] < 0) && cl < cr) {
			ans -= v[cl++];
			UPDATE();
		}
		UPDATE();
	}
	printf("%lld %d %d\n", res, rl + 1, rr + 1);
	return 0;
}