Pagini recente » Cod sursa (job #1609431) | Cod sursa (job #1265472) | Cod sursa (job #2901767) | Cod sursa (job #2343668) | Cod sursa (job #2631274)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
long long suma = 0;
int n,k;
int vect[5000010];
deque <int> coada;
int main()
{
fin >> n >> k;
for (int i = 1; i <= n; i++)
fin >> vect[i];
for (int i = 1; i <= n; i++){
while(!coada.empty()){ // am sters toate numerele mai mari decat elementul
if(vect[i] > coada.back())
break;
coada.pop_back();
}
coada.push_back(vect[i]); // il punem la sfarsit (adica o sa se formeze un fel de sir crescator)
if(coada.front() == vect[i - k]) // in caz ca e egal nu are relevanta sa il avem intrucat nu mai conteaza pentru urmatoarele elemente "ce vor venii"
coada.pop_front();
if(i >= k)
suma+=coada.front(); // mereu primul element din coada va fi cel mai mic
}
fout << suma;
}