Pagini recente » Cod sursa (job #1806487) | Cod sursa (job #53197) | Cod sursa (job #3193483) | Cod sursa (job #1981822) | Cod sursa (job #2554911)
#include <fstream>
std::ifstream f("secv2.in");
std::ofstream g("secv2.out");
const int NMAX = 50'005;
int n,k,v[NMAX],s[NMAX],minn = (1 << 30),begin,I,J,sol = -(1 << 30);
int main(){
f >> n >> k;
for(int i = 1;i <= n;++i){
f >> v[i];
s[i] = s[i - 1] + v[i];
}
/// trebuie sa gasim secventa de suma maxima de lungime cel putin k
/// incepem invers!!
/// daca o secventa se termina in J atunci noi trebuie sa gasim un index I astfel incat I <= J - K , I >= 1 si este minim
/// luam maximul diferentei dintre S[J] si S[I]
for(int i = k;i <= n;++i){
if(s[i - k] < minn){
minn = s[i - k];
begin = i - k + 1;
}
if(s[i] - minn > sol){
sol = s[i] - minn;
I = begin;
J = i;
}
}
g << I << ' ' << J << ' ' << sol;
return 0;
}