Cod sursa(job #2884848)

Utilizator EduardSanduSandu Eduard Alexandru EduardSandu Data 5 aprilie 2022 00:29:56
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

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

pair<int,int> deq[20000005];

int front = 10000002, back = front - 1;
int size = 0;

void push_back(int value, int index)
{
    back ++;
    deq[back] = {value, index}; //introducem perechi de numar | index
    size ++;
}

void push_front(int value, int index)
{
    front --;
    deq[front] = {value, index};
    size ++;
}

void pop_back()
{
    back--;
    size--;
}

void pop_front()
{
    front++;
    size--;
}

pair<int,int> front_el()
{
    return deq[front];
}

pair<int,int> back_el()
{
    return deq[back];
}

int main ()
{
    int n,i,j,k,nr;
    long long suma = 0;
    fin>>n>>k;
    for(i=1;i<=n;i++)
    {
        fin>>nr;
        while(size > 0 && back_el().first >= nr)
        {
            pop_back();
        }
        push_back(nr, i);
        if(i >= k)
            suma += front_el().first;
        if(i >= front_el().second + k - 1){
            pop_front();
        }
    }
    fout<<suma;
    return 0;
}