Pagini recente » Cod sursa (job #2616069) | Cod sursa (job #490849) | Cod sursa (job #284898) | Cod sursa (job #2137569) | Cod sursa (job #1804170)
#include <fstream>
#include <deque>
#include <vector>
using std::ifstream;
using std::ofstream;
using std::deque;
using std::vector;
//#include <iostream>
//using std::cout;
deque<long> storage;
vector<long> number;
int temporary, numbers, limit;
long long sum;
ifstream in("deque.in");
ofstream out("deque.out");
int main () {
in >> numbers >> limit;
number.reserve(numbers);
for (int i = 0; i < numbers; i++) {
in >> temporary;
number.push_back(temporary);
}
for (int i = 0; i < numbers; i++) {
while (!storage.empty() && number[storage.back()] >= number[i]) {
//cout << "Popped: " << number[storage.back()] << "\n";
storage.pop_back();
}
if (i + 1 >= limit) {
while (!storage.empty() && i - storage.front() >= limit) {
//cout << "Popped: " << number[storage.front()] << "\n";
storage.pop_front();
}
}
storage.push_back(i);
//cout << "Pushed: " << number[i] << "\n";
if (i + 1 >= limit) {
sum += number[storage.front()];
//cout << "Added to sum: " << number[storage.front()] << "\n";
}
}
out << sum << "\n";
}