Cod sursa(job #3211666)

Utilizator alexandraiacobelAlexandra Iacob alexandraiacobel Data 9 martie 2024 20:51:59
Problema Deque Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
using namespace std;
deque <int> deq;
ifstream fin("deque.in");
ofstream fout("deque.out");
const int Nmax = 5000005;
int n,i,j,k,a[Nmax];
long long sol;
//-7 9 2 4 -1 5 6 7 1
//-7 2
//Deque-ul va fi ordonat crescator, deci solutia este mereu
//primul element din deq
int main()
{
    fin>>n>>k;
    for(i=1; i<=n; i++)
    {
        fin>>a[i];
        //elimin elem outdated
        if(!deq.empty() && deq.front() == i-k) //daca a mai ramas un element outdated la inceput, elimin
            deq.pop_front();

        //elimin elm din front mai mari(pastram crescator)
        while(!deq.empty() && a[deq.back()] > a[i])
        {
            deq.pop_back();
        }

        //inserez elementul
        deq.push_back(i); //pun pozitia ptc pot avea Duplicate!!

        for(auto it = deq.begin();it!=deq.end();it++)
            cout<<a[*it]<<' ';

        cout<<'\n';
        //solutia este mereu primul elem din deq

        if(i>=k ) //trb sa am k elemente in subsir
            {
                sol += a[deq.front()];
               // cout<<deq.front()<<'\n';
            }

    }
    fout<<sol;

    return 0;
}