Cod sursa(job #2791847)

Utilizator dana24hdDana N dana24hd Data 31 octombrie 2021 11:24:07
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>

using namespace std;

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

/**
coada dubla
de la d[p] la d[u]
adaugarea de elemente la inceput => folosita cel mai rar

k=3, n=9
    1 2 3 4 5 6 7 8 9
v = 2 7 3 6 4 1 9 8 7
d = 1 x2x            3
      eliminat de 3

un element este scos din deque cand nu mai are "nicio sansa"
                                               vine un element mai mic

k elemente=> minim adaugat la suma

d = x1x 3 4
    eliminat de 4

primul capat=> iesire normala din coada (deja k elemente)
al doilea capat=> stiva (vin elemente, pleaca cele mai mari)


**/


int v[5000001];
int d[5000001];

int main()
{

    int n, k, p, u;
    in>>n>>k;

    long long suma=0;

    for(int i=1; i<=n; i++)
        in>>v[i];


    p=1;
    u=1;
    d[1]=1;

    if(k==1)
        suma=suma+v[1];

    for(int i=2; i<=n; i++){

        while( u>=p && v[d[u]]>=v[i] )
            u--;

        if( u>=p && d[p] < i-k+1 )
            p++;

        u++;
        d[u]=i;

        if( i>=k )
            suma=suma+v[d[p]];

    }

    out<<suma;

    return 0;
}