Pagini recente » Cod sursa (job #1025000) | Cod sursa (job #3289653) | Cod sursa (job #769363) | Cod sursa (job #1003193) | Cod sursa (job #3031135)
#include <fstream>
#include <deque>
//#define int long long int
using namespace std;
ifstream cin("deque.in");
ofstream cout("deque.out");
deque<int> dq;
int v[5000001];
int32_t main()
{
int n, k;
long long int sum=0;
cin>>n>>k;
for(int i=0; i<n; i++) cin>>v[i];
for(int i=0; i<n; i++)
{
while(!dq.empty() && v[dq.back()]>=v[i]) //cand ult nr adaugate sunt mai mari decat ce vom adauga acum,
dq.pop_back(); //le scoatem ca nu ne vor interesa niciodata
dq.push_back(i); //adaugam nr, ca sa aiba decoada cv intotdeauna
if(dq.front()<=i-k) //asta inseamna ca nu s-a mai scos vreun nr din st de mult si sunt mai mullt de ult
dq.pop_front(); //k, deci trebuie sa il scoatem
if(i>=k-1) //aici adunam la suma intot ult min, are e cel mai din st nr din decoada
sum+=v[dq.front()];
}
cout<<sum;
return 0;
}
/*
9 3
-7 9 2 4 -1 5 6 7 1
*/