Cod sursa(job #1294225)

Utilizator dragos_vecerdeaVecerdea Dragos dragos_vecerdea Data 17 decembrie 2014 09:32:10
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <stdio.h>
FILE *fin , *fout;
#define N 5000001
int st=1 , dr=0 , d[N] ,n ,k ,v[N];
long long s=0;
void stanga (int i)
{
    if(i-d[st]==k)
    {
        st++;
    }
}
void dreapta (int i)
{
    while(st<=dr && v[i]<=v[d[dr]])
    {
        dr--;
    }
    d[++dr]=i;
}
int main()
{
    int j;
    fin = fopen("deque.in" , "r");
    fout = fopen("deque.out" , "w");
    fscanf(fin ,"%d%d" ,&n ,&k);
    for(j=1;j<=n;j++)
    {
        fscanf(fin ,"%d" ,&v[j]);
    }
    for(j=1;j<k;j++)
    {
        stanga(j);
        dreapta(j);
    }
    for(j=k;j<=n;j++)
    {
        stanga(j);
        dreapta(j);
        s+=v[d[st]];
    }
    fprintf(fout ,"%lld" ,s);
    return 0;
}