Cod sursa(job #1907487)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 6 martie 2017 19:30:01
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
#include <deque>
using namespace std;
ifstream f ("deque.in");
ofstream g ("deque.out");
int v[5000001],i,n,k;
long long s;
deque <int> d; //coada dubla
int main()
{
    f>>n>>k; //citire
    for(i=1;i<=n;++i) f>>v[i];
    for(i=1;i<=n;++i)
    {
        while(!d.empty()&&v[i]<=v[d[d.size()-1]]) d.pop_back(); //daca elementul la care am ajuns e mai mic sau egal decat precedentele
        //le eliminam, chiar pana golim dubla coada
        d.push_back(i); //adaugam elementul actual
        if(d[0]==i-k) d.pop_front(); //daca avem k+1 elemente
        if(i>=k) s+=v[d[0]]; //daca avem k elemente
    }
    g<<s;
    return 0;
}