Cod sursa(job #926832)

Utilizator andrettiAndretti Naiden andretti Data 25 martie 2013 13:22:14
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<stdio.h>
#include<deque>
#define pb push_back
#define popb pop_back
#define popf pop_front
#define maxn 5000005
using namespace std;

int n,k;
int v[maxn];
long long int sol;
deque <int> q;

void cit()
{
    int i;
    scanf("%d%d",&n,&k);

    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
}

void solve()
{
    int i;

    for(i=1;i<=n;i++)
    {
        while(!q.empty() && v[q.back()]>=v[i]) q.popb();
        q.pb(i);
        if(q.front()==i-k) q.popf();
        if(i>=k) sol+=v[q.front()];
    }
}

int main()
{
    freopen("deque.in","r",stdin);
    freopen("deque.out","w",stdout);

    cit();
    solve();
    printf("%lld",sol);

    fclose(stdin);
    fclose(stdout);
}