Pagini recente » Cod sursa (job #3318488) | Cod sursa (job #830651) | Cod sursa (job #2149277) | Monitorul de evaluare | Cod sursa (job #3307261)
#include <bits/stdc++.h>
using namespace std;
const int N_MAX = 5000000;
ifstream fin("deque.in");
ofstream fout("deque.out");
int N, K;
int A[N_MAX + 5];
deque<int> dq;
int main()
{
fin >> N >> K;
for(int i = 1; i <= N; i++) {
fin >> A[i];
}
long long ans = 0;
for(int i = 1; i <= N; i++) {
while(!dq.empty() && A[dq.back()] >= A[i]) {
dq.pop_back();
}
dq.push_back(i);
///unde se afla elementul minim din deque?
///elementul din front este cel minim
///ce se intampla daca front-ul iasa din fereastra?
if(dq.front() == i - K) {
dq.pop_front();
}
if(i >= K) {///avem o fereastra de lungime K care se termina i
///in A[dq.front()] se afla valoarea minima din A[i - K + 1, ...,i]
ans += A[dq.front()];
}
}
fout << ans << "\n";
return 0;
}