Pagini recente » Cod sursa (job #2041785) | Cod sursa (job #220992) | Cod sursa (job #620763) | Cod sursa (job #1012162) | Cod sursa (job #1978352)
#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) {
scanf("%d", &v[cr]);
ans += v[cr];
int k = cr - cl + 1;
while (v[cl] < 0 && cl < cr && k > K) {
ans -= v[cl++];
k--;
UPDATE();
}
if (ans < 0) {
cl = cr + 1;
ans = 0;
}
else
UPDATE();
}
printf("%d %d %d\n", rl + 1, rr + 1, res);
return 0;
}