Pagini recente » Cod sursa (job #101549) | Cod sursa (job #2653380) | Cod sursa (job #1647477) | Istoria paginii runda/oni2011-scdtry/clasament | Cod sursa (job #2620621)
#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[5000005],v[5000005];
int main()
{
long long 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;
}