Cod sursa(job #2675282)

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

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

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

void add (pair <long long, long long> 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();
    freopen("deque.in","r", stdin);
    freopen("deque.out","w", stdout);

    scanf("%lld %lld", &n, &k);

    for (int i=1; i<=n; i++)
        scanf("%lld", &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();
    }

    printf("%lld", s);
    return 0;
}