Cod sursa(job #2045004)

Utilizator Corneliu10Dumitru Corneliu Corneliu10 Data 21 octombrie 2017 17:51:37
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <deque>
#include <cstdio>
using namespace std;

pair<int, int> deq[5000010];
int b,f;
int dqsize()
{
    return b - f;
}
int main()
{
    int n,k,i,nr;
    freopen("deque.in","r",stdin);
    freopen("deque.out","w",stdout);

    scanf("%d%d",&n,&k);
    scanf("%d",&nr);
    deq[++b] = make_pair(1,nr);
    for(int i =2;i <= k;i++)
    {
        scanf("%d",&nr);
        while(dqsize() > 0 && deq[b].second > nr)
        {
            b--;
        }
        deq[++b] = make_pair(i,nr);
    }

    long long sol = deq[f].second;
    for(int i=k+1;i<=n;i++)
    {
        if(i - deq[f].first >= k)
             f++;

        scanf("%d",&nr);
        while(dqsize() > 0 && deq[b].second > nr)
        {
            b--;
        }
        deq[++b] = make_pair(i,nr);
        sol += deq[f].second;
    }

    printf("%d",sol);
}