Cod sursa(job #1978455)

Utilizator mouse_wirelessMouse Wireless mouse_wireless Data 7 mai 2017 19:37:03
Problema Secventa 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cstring>
#include <climits>
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 s[MAXN];
int left, right;

#define UPDATE() if (ans > res) {\
\
	res = ans; \
	rl = cl + 1; \
	rr = cr; \
}\

	int main() {
		assert(freopen(InFile, "r", stdin));
		assert(freopen(OuFile, "w", stdout));
		int N, K;
		scanf("%d%d", &N, &K);
		int rl, rr, res;
		int mb = 0, cl = 0;
		s[0] = 0;
		for (int cr = 1; cr <= N; ++cr) {
			scanf("%d", &s[cr]);
			s[cr] += s[cr - 1];
			if (cr < K) continue;
			if (cr == K) {
				rl = 1, rr = cr;
				res = s[cr];
				continue;
			}
			if (s[cr - K] < mb) {
				cl = cr - K;
				mb = s[cr - K];
			}
			int ans = s[cr] - mb;
			UPDATE();
		}
		printf("%d %d %d\n", rl, rr, res);
		return 0;
	}