Pagini recente » Cod sursa (job #2782213) | Cod sursa (job #2432845) | Cod sursa (job #1109325) | Cod sursa (job #2509436) | Cod sursa (job #1052911)
#include <iostream>
#include <deque>
using namespace std;
struct elmt
{
int d_time, value;
};
long long makeStep(int k, int offset, int n);
deque<elmt> deq;
int main()
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
int n, k, offset;
cin >> n >> k;
for (int i = 0; i < k - 1; i++)
{
int val;
elmt e;
cin >> val;
if (deq.empty())
{
e.value = val;
e.d_time = i + k;
deq.push_back(e);
}
else
{
while (!deq.empty() && deq.back().value >= val)
{
deq.pop_back();
}
e.value = val;
e.d_time = i + k;
deq.push_back(e);
}
}
offset = k - 1;
cout << makeStep(k, offset, n);
return 0;
}
long long makeStep(int k, int offset, int n)
{
int val;
elmt e;
long long sum = 0;
while (offset < n)
{
cin >> val;
if (deq.empty())
{
e.value = val;
e.d_time = offset + k;
deq.push_back(e);
}
else
{
while (!deq.empty() && deq.back().value >= val)
{
deq.pop_back();
}
e.value = val;
e.d_time = offset + k;
deq.push_back(e);
}
if (!deq.empty() && deq.front().d_time <= offset)
{
deq.pop_front();
}
offset++;
sum += deq.front().value;
}
return sum;
}