Cod sursa(job #3127462)

Utilizator Maria_VerdesVerdes Maria-Ioana Maria_Verdes Data 7 mai 2023 15:42:28
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;

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

bool empty(int st, int dr)
{
    return st > dr;
}

int main()
{
    int deq[5000001], poz[5000001];
    int n, k, el;
    int st = 0, dr = 0;//deq si poz o sa aiba aceeasi marime => un singur set de indici
    long long int sum = 0;
    f >> n >> k;
    for(int i = 1; i <= n; i++)
    {
        f >> el;
        //vrem sa elimine din finalul deque-ului elementele mai mari ca el curent
        while(!empty(st, dr) && deq[dr] > el)
            dr--;
        deq[++dr] = el; //punem elementul in deq
        poz[dr] = i; //punem pozitia lui in poz
        //pt fiecare segment care incepe de la k pana la final trebuie sa gasim un minim si sa-l adunam la secventa
        if(i >= k)
        {
            //dam pop la minim daca nu mai e in secventa
            if(poz[st] == i - k)
                st++;
            //il luam pe cel care ramane primul in deq
            sum += deq[st];
        }
    }
    g << sum;
    return 0;
}