Cod sursa(job #804274)

Utilizator andi12Draghici Andrei andi12 Data 29 octombrie 2012 15:41:48
Problema Deque Scor 25
Compilator c Status done
Runda Arhiva educationala Marime 0.63 kb
#include <stdio.h>
#include <stdlib.h>
int v[5000001];
int dq[5000001];
int dr,st,i,k,n;
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()
{
    FILE *in, *out;
    in=fopen("deque.in","r");
    out=fopen("deque.out","w");
    int s = 0;
    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\n",s);
    return 0;
}