Cod sursa(job #2731630)

Utilizator kyanashiBelu Mara Luciana kyanashi Data 27 martie 2021 23:51:49
Problema Deque Scor 15
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.73 kb
#include <iostream>
#include <fstream>

using namespace std;

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

class Deque{
public:
    int *vect;
    int first;
    int last;
    int size;

    Deque();
    void add_last(int);
    void delete_last();
    void delete_first();
};

Deque::Deque()
{
    vect = new int[1];
    last = -1;
    first = 0;
    size = 0;
}


void Deque::add_last(int x)
{
    size++;
    int *vectAux = new int[size];
    int k = -1;

    for (int i = first; i <= last; i++)
    {
        k++;
        vectAux[k] = vect[i];
    }

    delete []vect;
    vect = vectAux;

    first = 0;
    last++;

    vect[last] = x;
}

void Deque::delete_first()
{
    if (!size)
        return;

    if(last > first)
        first++;
    else
    {
        first = 0;
        last = -1;
    }

    size--;
}

void Deque::delete_last()
{
    if (!size)
        return;

    if(last > first)
        last--;
    else
    {
        first = 0;
        last = -1;
    }

    size--;
}


int main()
{
    Deque sir;
    Deque poz;

    int n,k;
    fin >> n >> k;

    long long int suma = 0;

    int v[n];

    for(int i = 0 ; i < n; i++)
        fin >> v[i];

    for (int i = 1; i <= n; i++)
    {
        while (sir.size && v[i-1] <= sir.vect[sir.last])
        {
            sir.delete_last();
            poz.delete_last();
        }

        sir.add_last(v[i-1]);
        poz.add_last(i);

        if (poz.vect[sir.first] == (i - k))
        {
            sir.delete_first();
            poz.delete_first();
        }

        if (i >= k)
            suma += sir.vect[sir.first];
    }

    fout << suma;

    return 0;
}