Pagini recente » Cod sursa (job #718592) | Cod sursa (job #3337238) | Borderou de evaluare (job #2766387) | Cod sursa (job #1206985) | Cod sursa (job #3307451)
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
ifstream fin ("deque.in");
ofstream fout ("deque.out");
int main () {
int n, k;
fin >> n >> k;
vector <long long> v (n + 1);
for (int i = 1; i <= n; ++i)
fin >> v[i];
long long sum = 0;
deque <int> dq;
for (int i = 1; i <= n; ++i) {
while (!dq.empty() && v[dq.back()] >= v[i])
dq.pop_back(); // eliminam elementele pentru ca nu vor putea fi minimul
dq.push_back(i);
if (dq.front() <= i - k)
dq.pop_front(); // eliminam elementul pentru ca am iesit din fereastra respectiva
if (i >= k)
sum += v[dq.front()]; // adaugam minimul
}
fout << sum;
return 0;
}