Cod sursa(job #2730191)

Utilizator lalalaura_02Udroiu Laura-Ioana lalalaura_02 Data 25 martie 2021 21:52:09
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#define n 5000001

using namespace std;

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

int sir[n], v[n];

int main()
{
    int N, K, p, u, i;

    long long s = 0;

    p = 0;
    u = -1; //initializam deque gol

    f>>N>>K;

    for(i = 0 ; i < N; i++)
        f>>sir[i];
    for(i = 0 ; i < N; i++)
    {
        while (sir[i] <= sir[v[u]] && p <= u)
            u--;   //cat timp elementul de pe pozitia i e mai mic decat elementele din rear-ul cozii duble
        v[++u] = i;
        if(v[p] == i-K)
            p++;          //in cazul in care minimul gasit este egal cu cel de pe pozitia i-K ii eliminam pozitia din deque,
        //deoarece acesta nu mai are relevanta pentru pasii > i
        if(i + 1 >= K)
            s += sir[v[p]];
    }
    g<<s;
    return 0;
}