Cod sursa(job #2140010)

Utilizator VladAfrasineiAfrasinei VladAfrasinei Data 22 februarie 2018 22:51:04
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#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;
}