Cod sursa(job #2862822)

Utilizator TudosieRazvanTudosie Marius-Razvan TudosieRazvan Data 5 martie 2022 21:36:14
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <cstring>
#include <climits>
#include <unordered_map>

#define NMAX 5000003

using namespace std;

int n,k;
int v[NMAX];
deque<int> dq;

FILE *fin,*fout;

void punStiva(int poz)
{
    //scot din stiva elementele mai mari ca v[poz]
    while(!dq.empty() && v[dq.back()]>v[poz])
    {
        dq.pop_back();
    }
    dq.push_back(poz);
}

int main()
{
    fin=fopen("deque.in","r");
    fout=fopen("deque.out","w");
    fscanf(fin,"%d %d",&n,&k);
    for(int i=1; i<=n; i++)
    {
        fscanf(fin,"%d",&v[i]);
    }

   //parcurg element cu element
    long long int sum=0;
    for(int i=1; i<=n; i++)
    {
        //pun elementul din v[i] in stiva
        punStiva(i);
        int primulElem=dq.front();
        if(i>=k)
        {
            if(i-primulElem+1>k)
            {
                dq.pop_front();
            }
            sum+=v[dq.front()];//noul front
        }
        
    }
    fprintf(fout,"%lld",sum);
    return 0;
}