Cod sursa(job #2732197)

Utilizator atudoreimirunaAtudorei Miruna Gabriela atudoreimiruna Data 28 martie 2021 20:03:21
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <fstream>
#include <stdio.h>

#define Nmax 5000001

using namespace std;

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

int N, K;
int a[Nmax];
int Deque[Nmax], front, back;

int main()
{
    // citirea
    fin >> N >> K;
    for ( int i = 1; i <= N; i++ )
        fin >> a[i];

    long long S = 0;

    front = 1; 
    back = 0;

    for ( int i = 1; i <= N; i++ )
    {
        while ( front <= back && a[i] <= a[Deque[back]]) 
            back--; // eliminarea elementelor >= decat a[i]
        back++;
        Deque[back] = i;    

        if ( Deque[front] == i-K ) front++; // daca elementul minim coincide cu cel de pe pozita i-K, il eliminam

        if ( i >= K ) S += a[Deque[front]]; // adaugarea minimului la suma
    }
    fout << S;
    return 0;
}