Cod sursa(job #563452)

Utilizator SadmannCornigeanu Calin Sadmann Data 25 martie 2011 09:49:58
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>

#define NMAX 5000005
using namespace std;
int N,K,x,front=1,back;
long long suma;
long long V[NMAX];
ifstream in("deque.in");
ofstream out("deque.out");
int deck[NMAX];
int main()
{

    in>>N>>K;

    for(int i=1;i<=N;i++)
    {
        in>>V[i];
        // Cat timp elementul curent este mai mic decat ultimul element
        // din deque, eliminam pozitia ultimului element din deque
        while(front<=back && V[i]<=V[deck[back]])
            back--;
        deck[++back]=i;
        // Daca elementul minim coincide cu cel de pe pozita i-K, ii eliminam pozitia
        // din deque, deoarece acesta nu mai conteaza pentru pasii >= i
        if(deck[front]==i-K)
            ++front;
        if(i>=K)
            suma+=V[deck[front]];
    }
    out<<suma;


    return 0;
}