Pagini recente » Cod sursa (job #2541900) | Cod sursa (job #2838703) | Cod sursa (job #680393) | Cod sursa (job #2663130) | Cod sursa (job #2620619)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
//folosim un vector drept coada in care vom retine minimul secventelor
int coada[500005],v[500005];
int main()
{
int n, k,sum=0,st=0,dr=-1;
fin>>n>>k;
for(int i=0;i<n;i++)
fin>>v[i];
for(int i=0;i<n;i++)
{
//cat timp elementul curent e mai mic decat ultimul element din coada
//eliminam elementele mai mari decat elementul curent
//(elementul curent va deveni ultimul din coada)
while(st<=dr && v[i]<v[coada[dr]])
dr--;
//introducem pozitia elementului curent in coada
coada[++dr]=i;
//daca elementul minim este pe pozitia i-k,luam urmatorul minim
if(coada[st]==i-k)
st++;
//adunam minimul secventei(primul element din coada) la suma(incepand dupa ce am parcurs minim k elemente
//(k-1 fiindca incepem de la 0)
if(i>=k-1)
sum+=v[coada[st]];
}
fout<<sum;
return 0;
}