Cod sursa(job #804277)

Utilizator classic_gamesofia nitoi classic_game Data 29 octombrie 2012 15:47:03
Problema Deque Scor 25
Compilator c Status done
Runda Arhiva educationala Marime 0.63 kb
#include <stdio.h>
#include <stdlib.h>
int n,k,v[5000001],dq[5000001],dr=0,st=1,s=0;

void stanga (int i)
{
    if (i-dq[st]==k)
        st++;
}

void dreapta(int i)
{
    while (dr>=st && v[i]<=v[dq[dr]])
        dr--;
    dq[++dr]=i;
}

int main()
{
    int i;
    FILE *in,*out;
    in=fopen("deque.in","r");
    out=fopen("deque.out","w");
    fscanf (in,"%d%d",&n,&k);
    for (i=1;i<=n;i++)
        fscanf (in,"%d",&v[i]);
    for (i=1;i<k;i++)
        dreapta(i);
    for (i=k;i<=n;i++)
    {
        stanga(i);
        dreapta(i);
        s+=v[dq[st]];
    }
    fprintf (out,"%d",s);
    return 0;
}