Cod sursa(job #1467583)

Utilizator k_ounu_eddyIacob Eduard k_ounu_eddy Data 3 august 2015 17:34:31
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<iostream>
#include<fstream>
using namespace std;

int main()
{
    // Paul Dan-Baltescu Infoarena
    // explicat foarte bine
    int N, K;
    int *A, *deque;
    
    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);

    scanf("%d %d", &N, &K);

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

    for(int i=1;i<=N;i++)
    {
        scanf("%d", 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;
    return 0;
}