Pagini recente » Cod sursa (job #3306817) | Cod sursa (job #3322390) | Cod sursa (job #1775891) | Cod sursa (job #888222) | Cod sursa (job #3317204)
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
int main() {
ifstream fin("secv2.in");
ofstream fout("secv2.out");
int N, K;
fin >> N >> K;
vector<long long> A(N + 1), P(N + 1, 0);
for (int i = 1; i <= N; i++) {
fin >> A[i];
P[i] = P[i - 1] + A[i];
}
long long max_sum = LLONG_MIN;
long long P_min = P[0];
int index_min = 0;
int best_start = 1, best_end = K;
for (int j = K; j <= N; j++) {
// pentru suma de lungime cel puțin K
long long sum = P[j] - P_min;
if (sum > max_sum) {
max_sum = sum;
best_start = index_min + 1;
best_end = j;
}
// actualizăm minimul pentru prefixurile până la j - K + 1
if (P[j - K + 1] < P_min) {
P_min = P[j - K + 1];
index_min = j - K + 1;
}
}
fout << best_start << " " << best_end << " " << max_sum << "\n";
return 0;
}