Cod sursa(job #1467544)

Utilizator k_ounu_eddyIacob Eduard k_ounu_eddy Data 3 august 2015 16:08:32
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<iostream>
#include<fstream>
using namespace std;

int main()
{
    // Paul Dan-Baltescu Infoarena
    // explicat foarte bine
    int N, K;
    int *A, *deque;

    fstream fin, fout;
    
    fin.open("deque.in");
    freopen("deque.out", "w", stdout);

    fin>>N>>K;
    long long sum = 0;
    A = new int[N + 1];
    deque = new int[N+1];

    for(int i=1;i<=N;i++)
    {
        fin>>A[i];
    }

    int B=0, F=1;

    for(int i=1;i<=N;i++)
    {
         while(B>=F && A[i] <= A[deque[B]]) B--;
         deque[++B] = i;
         // eliminam de la inceputul cozii duble elementul curent
         // i.e. a depasit secventa de K elemente
         if(deque[F] == i-K) F++;
         if(i>=K) sum+= A[deque[F]];
    }

    printf("%lld", sum);
    
    delete[] A;
    fin.close();
    fout.close();
    return 0;
}