Cod sursa(job #2887139)

Utilizator Tudose_StefanTudose Alexandru Stefan Tudose_Stefan Data 8 aprilie 2022 21:56:16
Problema Deque Scor 45
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.32 kb
#include <fstream>
#include <cstdlib>
#include <vector>

using namespace std;

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


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

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

int main()
{
    fin >> nrElem >> lSubsir;
    dichiu.assign(lSubsir+5, 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 <long long> & nums, long long nr, long long& fata, long long& spate)
{
    fata++;
    if (fata == nums.size())
        fata = 0;
    nums[fata] = nr;
    nrElDq++;
}
void scoateFata(vector <long long> &nums, long long &fata, long long &spate)
{
    nums[fata] = 0;
    fata--;
    if (fata < 0)
        fata = nums.size()-1;
    nrElDq--;
}

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

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