Cod sursa(job #2675289)

Utilizator Joke2111Pricop Tudor Joke2111 Data 21 noiembrie 2020 12:24:46
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;

FILE *fin=fopen("deque.in", "r");
FILE *fout=fopen("deque.out", "w");

deque < pair < int, int > > dq; /// valoare si timp
int oldTime=1, n, k, V[5000005];
long long s;

void fast ()
{
    ios_base::sync_with_stdio(false);
    cin.tie();
}

void add (pair <int, int> x)
{
    while (!dq.empty() && dq.back().first> x.first)
        dq.pop_back();

    dq.push_back(x);
}

void _remove ()
{
    if (dq.front().second==oldTime)
        dq.pop_front();
    oldTime++;
}

int getMin () /// minimul din dq
{
    return dq.front().first;
}

int main()
{
    fast();

    fscanf(fin,"%d %d", &n, &k);

    for (int i=1; i<=n; i++)
        fscanf(fin,"%d", &V[i]);

    for (int i=1; i<=k; i++)
        add({V[i],i});

    s+=getMin();

    for (int i=k+1; i<=n; i++)
    {
        _remove();
        add({V[i],i});
        s+=getMin();
    }

    fprintf(fout,"%lld", s);
    return 0;
}