Pagini recente » Cod sursa (job #946692) | Cod sursa (job #1005541) | Cod sursa (job #2025157) | Cod sursa (job #2351268) | Cod sursa (job #1491531)
#include <deque>
#include <iostream>
using namespace std;
deque<int> vals, poss;
int n, k, i, nmb, min_nmb, j;
long long sum = 0;
int main()
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
scanf("%d%d",&n,&k);
for (i = 0; i < n; ++i)
{
min_nmb = 10000001;
scanf("%d",&nmb);
while (vals.size()>0 && (vals.at(vals.size() - 1) >= nmb
|| poss.at(vals.size() - 1) < i - k + 1))
vals.pop_back(), poss.pop_back();
while (poss.size()>0 && poss.at(0) < i - k + 1) poss.pop_front();
vals.push_back(nmb), poss.push_back(i);
if (i + 1 >= k)
{
j = vals.size() - 1;
while (j >= 0 || poss[j] >= i - k + 1)
{
if (min_nmb>vals.at(j)) min_nmb = vals.at(j--);
}
sum += min_nmb;
}
}
cout << sum;
}