Pagini recente » Cautari ortogonale | Cod sursa (job #1801447) | Cod sursa (job #1762975) | Cod sursa (job #3258975) | Cod sursa (job #2886725)
#include <fstream>
#include <deque>
#include <climits>
#define MARK 10000001
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int main() {
deque<int> d;
int n, k, currentValue, min = INT_MAX, pos = 0;
long long sum = 0;
fin >> n >> k;
for (int i = 0; i < n; ++i) {
fin >> currentValue;
d.push_back(currentValue);
}
// don't forget about the case where there aren't enough k numbers
while (d[pos] != MARK && d[k - 1] != MARK) {
if (d[pos] < min) {
min = d[pos];
}
if (pos == k - 1) {
d.push_back(MARK);
d.push_back(min);
d.pop_front();
min = INT_MAX;
pos = -1;
}
++pos;
}
while (d.front() != MARK) {
d.pop_front();
}
for (int i = 0; i < d.size(); ++i) {
if (d[i] != MARK) {
sum += d[i];
}
}
fout << sum;
return 0;
}