Cod sursa(job #2761650)

Utilizator VladCaloVlad Calomfirescu VladCalo Data 3 iulie 2021 10:24:25
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>

using namespace std;
 
ifstream fin("deque.in");
ofstream fout("deque.out");

int f,b,n, k, a[5000001], dq[5000001],i; // dque retine poz min
long long s=0;
int main() // de la f la b vor fi mereu k elem (odata ce am parcurs suf elem)
{ // f este locul in care ne aflam cu cautarea si b ar trebui sa fie lung reala actuala a lui dq
    fin>>n>>k;// numerele si lung secv
    for (i = 1; i <= n; i++)
       fin>>a[i]; //memoram nr in a
    f = 1; b = 0; // front si back
    for (i = 1; i <= n; i++)
    {
        while (f <= b && a[i] <= a[dq[b]]) //f<=b inseamna dq nu e empty, si elem curr este <= cu ultimul 
                                                     //elem adugat in dq
            b--; // ca a scos din spate
        dq[++b] = i; // baga in spate poz i
        // fout<<i<<" ";
 
        if (dq[f] == i-k) // cand scot din fata f++, aceasi chestie cu i-k ca la vila cand am trecut peste k
            f++;
 
        if (i >= k) // am parcurs suf 
            s += a[dq[f]]; // bag in suma minimul direct
            // fout<<f<<" ";
    }
    // fout <<endl;

    // for (int i=1;i<=n;i++)
    // {
    //     fout<<dq[i]<<" ";

    // }
    // fout<<endl;

 
    fout<<s;
    
//    -7  dq:
//    9
//    2
//    4
//    -1
//    5
//    6
//    7
//    1
 
    return 0;
}