Cod sursa(job #2887149)

Utilizator Tudose_StefanTudose Alexandru Stefan Tudose_Stefan Data 8 aprilie 2022 22:04:46
Problema Deque Scor 85
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.12 kb
#include <fstream>
#include <cstdlib>
#include <vector>

using namespace std;

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

void adaugFata(vector <int> & nums, int nr, int &fata, int &spate);
void scoateFata(vector <int> &nums, int &fata, int &spate);
void adaugSpate(vector <int> & nums, int nr, int &fata, int &spate);
int damiFata(vector <int> &nums, int &fata, int &spate);

long long sum;
vector <int> dichiu, numere;
int nrElDq, nrElem, lSubsir, i, fata, spate, k;
bool adaugat = 0;

int main()
{
    fin >> nrElem >> lSubsir;
    dichiu.assign(lSubsir, 0);
    numere.assign(nrElem, 0);
    fata = -1;
    spate = 0;
    for (i = 0; i < nrElem; i++)
        fin >> numere[i];
    adaugFata(dichiu, 0, fata, spate);
    k = 1;
    for (i = 1; i <nrElem; i++)
    {
        adaugat = 0;
        if (k == lSubsir)
        {
            if (damiFata(dichiu, fata, spate) == i-k)
                scoateFata(dichiu, fata, spate);
        }
        else
            k++;
        if (numere[i] < numere[damiFata(dichiu, fata, spate)])
        {
            while (numere[i] < numere[damiFata(dichiu, fata, spate)])
            {
                scoateFata(dichiu, fata, spate);
                if (nrElDq == 0)
                    break;
            }
            adaugSpate(dichiu, i, fata, spate);
        }
        else
            adaugSpate(dichiu, i, fata, spate);
        if (k == lSubsir)
            sum += numere[damiFata(dichiu, fata, spate)];
    }
    fout << sum;
    return 0;
}

void adaugFata(vector <int> & nums, int nr, int& fata, int& spate)
{

    fata++;
    if (fata == nums.size())
        fata = 0;
    nums[fata] = nr;
    nrElDq++;
}

void scoateFata(vector <int> &nums, int &fata, int &spate)
{
    nums[fata] = 0;
    fata--;
    if (fata < 0)
        fata = nums.size()-1;
    nrElDq--;
}

void adaugSpate(vector <int> & nums, int nr, int &fata, int &spate)

{
	spate--;
    if (spate < 0)
        spate = nums.size()-1;
    nums[spate] = nr;
    nrElDq++;
}

int damiFata(vector <int> &nums, int &fata, int &spate)
{
    return nums[fata];
}