Pagini recente » Monitorul de evaluare | Cod sursa (job #1734765) | Cod sursa (job #1921398) | Cod sursa (job #2037401) | Cod sursa (job #2033677)
#include <fstream>
std::ifstream in("deque.in");
std::ofstream out("deque.out");
int lungime, elemente;
int element[5000000];
int indice[5000000];
int start = 0, stop = 0;
long long rezultat = 0;
void add(int minLimit, int i) {
while (indice[start] < minLimit) start++;
if (start == stop) {
indice[start] = i;
stop++;
return;
}
while(start != stop && element[i] <= element[indice[stop - 1]]) stop--;
indice[stop] = i;
stop++;
}
int main() {
in >> lungime >> elemente;
for (int i = 0; i < lungime; i++) in >> element[i];
for (int i = 0; i < elemente - 1; i++) add(0, i);
for (int i = elemente - 1; i < lungime; i++) {
add(i - elemente + 1, i);
rezultat += element[indice[start]];
}
out << rezultat;
return 0;
}