Cod sursa(job #1978358)

Utilizator mouse_wirelessMouse Wireless mouse_wireless Data 7 mai 2017 15:56:09
Problema Secventa 2 Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 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 50010
int v[MAXN];
int left, right;

#define UPDATE() if (k >= K) {\
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, K;
		scanf("%d%d", &N, &K);
		int ans = 0, res = 0, cl = 0;
		int rl, rr;
		bool rs = false;
		for (int cr = 0; cr < N; ++cr) {
			int k = cr - cl + 1;
			while ((ans < 0 || v[cl] < 0) && k > K) {
				ans -= v[cl++];
				k--;
			}
			scanf("%d", &v[cr]);
			ans += v[cr];
			UPDATE();
			while ((ans < 0 || v[cl] < 0) && k > K) {
				ans -= v[cl++];
				k--;
				UPDATE();
			}
			UPDATE();
		}
		printf("%d %d %d\n", rl + 1, rr + 1, res);
		return 0;
	}