Cod sursa(job #2761788)

Utilizator mihaaelaMihaela Radu mihaaela Data 4 iulie 2021 01:45:47
Problema Deque Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <iostream>

using namespace std;

int main()
{

    long A[5000010],deque[5000010],n,i,k;
    long long sum_min=0;

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

    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;
    f.close();
    g.close();
    return 0;
}