Pagini recente » Cod sursa (job #1727373) | Cod sursa (job #960395) | Cod sursa (job #2274496) | Cod sursa (job #156287) | Cod sursa (job #3286461)
#include <bits/stdc++.h>
using namespace std;
ifstream f("secv2.in");
ofstream g("secv2.out");
int n, k;
long long a[50001], sp[50001];
int main(){
f >> n >> k;
for (int i = 1; i <= n; i++){
f >> a[i];
}
// Calculăm vectorul de sume parțiale: sp[0] = 0; sp[i] = a[1] + ... + a[i]
sp[0] = 0;
for (int i = 1; i <= n; i++){
sp[i] = sp[i-1] + a[i];
}
// Inițial, pentru R = k, minimul este sp[0]
long long bestSum = sp[k] - sp[0];
int bestL = 1, bestR = k;
long long minVal = sp[0];
int minIndex = 0;
// Parcurgem R de la k la n
for (int R = k; R <= n; R++){
// Actualizăm minimul prefixului pentru j în intervalul [0, R - k]
if (R - k >= 0 && sp[R - k] < minVal) {
minVal = sp[R - k];
minIndex = R - k;
}
long long candidate = sp[R] - minVal;
if (candidate > bestSum) {
bestSum = candidate;
bestL = minIndex + 1;
bestR = R;
}
}
g << bestL << " " << bestR << " " << bestSum;
return 0;
}