Pagini recente » Borderou de evaluare (job #3305116) | Borderou de evaluare (job #2197570) | Borderou de evaluare (job #884250) | Borderou de evaluare (job #3308897) | Cod sursa (job #3338245)
#include <bits/stdc++.h>
using namespace std;
ifstream f("deque.in");
ofstream g("deque.out");
int n,k,a[5000005],dq[5000005],s,st,dr,i;
long long rez;
int main()
{
f>>n>>k;
for(i=1;i<=n;i++)f>>a[i];
st=1, dr=0;///in deque retin doar indicii
for(i=1;i<=n;i++){
while(st<=dr && a[i]<=a[dq[dr]])dr--;///elimin ultimul element din deque cat timp el nu este minimul pe secventa
dq[++dr]=i;
if(dq[st]==i-k)st++;///daca elementul minim(varful) coincide cu cel de pe pozitia i-k, il elimin pt ca nu mai conteaza pt urmatorii pasi >=i (practic daca nu as elimina as face secv prea lunga)
if(i>=k)rez+=a[dq[st]];///minimul se afla mereu in varful deque ului
}
g<<rez;
return 0;
}