Cod sursa(job #2628582)

Utilizator sireanu_vladSireanu Vlad sireanu_vlad Data 16 iunie 2020 14:42:05
Problema Deque Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.34 kb
#include <iostream>
#include <fstream>
#include <deque>

using namespace std;

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

void read(int* v, int n)
{
    for(int i = 0; i < n; i++)
    {
        in >> v[i];
    }
}

int main()
{
    int n, k, s = 0;
    in >> n >> k;
    int v[n];
    read(v, n);
    deque<int> u;
    u.push_back(v[0]);

    for(int i = 1; i < n; i++)
    {
        if(i - k >= 0)
        {
            if(v[i-k] == u.front())
            {
                u.pop_front();
            }
        }
        if(i != n-1)
        {
            //cout << "f";
            if(v[i] < v[i+1])
            {
                if(u.size() > 0)
                {
                    if(v[i] < u.back())
                    {
                        do
                        {
                            u.pop_back();
                            if(u.size() == 0)
                            {
                                break;
                            }
                        }
                        while(v[i] < u.back());
                    }
                }
                u.push_back(v[i]);
            }
            else if(u.size() > 0)
            {
                if(v[i] < u.back())
                {
                    do
                    {
                        u.pop_back();
                        if(u.size() == 0)
                        {
                            break;
                        }
                    }
                    while(v[i] < u.back());
                }
                u.push_back(v[i]);
            }

        }
        else
        {
            //cout << "here " << v[i] << ", " << u.back() << " ";
            if(u.size() > 0)
            {
                if(v[i] < u.back())
                {
                    do
                    {
                        u.pop_back();
                        if(u.size() == 0)
                        {
                            break;
                        }
                    }
                    while(v[i] < u.back());
                }
            }
            u.push_back(v[i]);
        }
        if(i - k >= -1)
        {
            //cout << u.front() << " ";
            s += u.front();
        }
    }

    out << s;

    return 0;
}