Pagini recente » Cod sursa (job #1844251) | Cod sursa (job #1866921) | Cod sursa (job #2488295) | Cod sursa (job #1268239) | Cod sursa (job #1044753)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <deque>
using namespace std;
deque <int> deq;
ifstream f ("deque.in");
ofstream g ("deque.out");
int n, k, v[5000001];
long long sum;
void cit()
{
f >> n >> k;
for(int i=1; i<=n; i++)
f >> v[i];
}
void rezolva()
{
for(int i=1; i<=n; i++)
{
while(!deq.empty() && v[i] <= v[deq.back()]) // cand vine un elem nou, sterge din dreapta toate elem mai mici ca el
deq.pop_back();
deq.push_back(i); // activitatea principala: punem in dreapta valorile din vector
if(deq.front() == i-k) // daca nu mai este relevant, am trecut de particica lui, il scoatem din stanga
deq.pop_front();
if(i >= k) // pt i<k abea comparam primele k valori, nu stim inca pe care sa o adaugam
sum += v[deq.front()];
}
}
int main()
{
cit();
rezolva();
g << sum;
return 0;
}