Pagini recente » Cod sursa (job #3348044) | Borderou de evaluare (job #2482700) | Cod sursa (job #3346366) | Borderou de evaluare (job #1970289) | 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;
}