Pagini recente » Monitorul de evaluare | Diferente pentru problema/ciclueuler intre reviziile 2 si 3 | Cod sursa (job #2451626) | Cod sursa (job #1720283) | Cod sursa (job #1923162)
#include <iostream>
#include <deque>
#include <cstdio>
using namespace std;
const int NMax = 5000005;
long long sum = 0;
int N, K;
int v[NMax];
deque < int > Dq;
void Read()
{
scanf("%d%d", &N, &K);
for(int i=1; i<=N; ++i)
scanf("%d", &v[i]);
}
void Solve()
{
Dq.push_back(1);
for(int i=2; i<=N; ++i)
{
if(Dq.front() == i-K)
Dq.pop_front();
while(!Dq.empty() && v[i]<=v[Dq.back()])
Dq.pop_back();
Dq.push_back(i);
if(i>=K)
sum += v[Dq.front()] * 1LL;
}
printf("%lld", sum);
}
int main()
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
Read();
Solve();
return 0;
}