Pagini recente » Cod sursa (job #2000479) | Cod sursa (job #1818764) | Cod sursa (job #1098258) | Cod sursa (job #831339) | Cod sursa (job #2140010)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int n,k,a[5000005];
deque <int> q;
long long s;
int main()
{
int n,k,i;
fin>>n>>k;
for(i=1;i<=n;i++)
fin>>a[i]; //Se citeste elementul
for(i=1;i<=k;i++)
{
while(!q.empty()&&a[i]<a[q.back()]) //Se elimina indicii numerelor de la final mai mari decat el dupa care se adauga el la final
q.pop_back();
q.push_back(i);
}
s=s+a[q.front()]; //Fiind prima secventa se va adauga separat primul element din deque,fiind cel mai mic.
for(i=k+1;i<=n;i++)
{
while(!q.empty()&&a[i]<a[q.back()]) //Se elimina toate numere de la final mai mari decat el dupa care se adauga el la final
q.pop_back();
q.push_back(i);
while(!q.empty()&&i-k+1>q.front()) //In aceasta secventa se afla si indici dintr o secventa precedenta care nu pot face parte din aceasta secventa.Ca un indice sa faca parte din aceasta secventa trebuie sa fie intre [i-k+1;i] ca sa aiba exact k elemente.
q.pop_front(); //Se elimina indicii elementelor care nu fac parte din secventa
s=s+a[q.front()]; //Se adauga la suma primul element din deque fiind siur ca acesta face parte din secventa si este cel mai mic.
}
fout<<s;
return 0;
}