Cod sursa(job #1494513)

Utilizator alexandru822Bosinta Alexandru alexandru822 Data 1 octombrie 2015 11:56:20
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>

using namespace std;

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

const int SIZE_MAX = 500000;
int date[SIZE_MAX], v[SIZE_MAX];
int top = 0, bottom = 0, k;

int lungime()
{
    return top - bottom;
}

void pushFront(int val)
{
    date[top%SIZE_MAX] = val;
    top ++;
}

int topDeque()
{
    return date[(top-1)%SIZE_MAX];
}

int bottomDeque()
{
    return date[bottom%SIZE_MAX];
}

void popFront()
{
    top--;
}

void popBack()
{
    bottom++;
}

bool isInSequence(int i)
{
    if(bottomDeque() == v[i-k])
        return false;
    else
        return true;
}

int main()
{
    int n, val, sum = 0;
    in >> n >> k;
    in >> val;
    v[1] = val;
    pushFront(val);
    for(int i = 2;i<=n;i++)
    {
        in >> val;
        v[i] = val;
        if(val >= topDeque())
            pushFront(val);
        else
        {
            while(val < topDeque())
                popFront();
            pushFront(val);
        }
        if(!isInSequence(i))
           popBack();
        if(i>=k)
            sum += bottomDeque();
    }
    out << sum;
    return 0;
}