Cod sursa(job #2761794)

Utilizator mihaaelaMihaela Radu mihaaela Data 4 iulie 2021 01:54:24
Problema Deque Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream f("deque.in");
ofstream g("deque.out");

#define maxi 500001

int A[maxi],deque[maxi],n,k;
long long sum_min=0;

int main()
{

    int fata=1,spate=0;         //momentan deque este gol
    f>>n>>k;

    for(int i=1;i<=n;i++)
        f>>A[i];
    for(int i=1;i<=n;i++)
            {
              while(fata<=spate && A[i]<=A[deque[spate]]) // Cat timp elementul curent este mai mic decat ultimul element din deque
                spate--;                                  //  eliminam pozitia ultimului element din deque

              deque[++spate]=i;                               // Adaugam pozitia elementului curent in deque

              if(deque[fata]==i-k) fata++;                    // Daca elementul minim este egal cu cel de pe pozita i-K
                                                              //ii eliminam pozitia din deque, deoarece acesta nu mai conteaza pentru pasii >= i

              if(i>=k)  sum_min=sum_min + A[deque[fata]];                // Afisam minimul, acesta aflandu-se in varful deque-ului
            }
    g<<sum_min;
    f.close();
    g.close();
    return 0;
}