Cod sursa(job #1780641)

Utilizator gorneanu.andreiFMI Gorneanu Andrei gorneanu.andrei Data 16 octombrie 2016 14:36:31
Problema Deque Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>
int first,last,v[5000000],poz[5000000];


    void push(int val)
    {
        ++last;
        v[last]=val;
    }

    void push_poz(int val)
    {
        poz[last]=val;
    }

    void pop_back()
    {
        first++;
    }


    int pop_front()
    {

        last--;
    }

int main()

{   int n,k,i,x,y,j;
    long long suma=0;
    first=0;
    last=-1;
    FILE *f,*g;

    f=fopen("deque.in","r");
    g=fopen("deque.out","w+");

    fscanf(f,"%d %d",&n,&k);

   //printf("i x k p e   first   last  \n");
    for(i=1;i<=n;++i)
    {
        fscanf(f,"%d",&x);

        while(x<v[last] && first<=last)
        pop_front();

        push(x);
        push_poz(i-1);


        if(i-k>=0)
        suma=suma+v[first];
        //printf("%d ",suma);


        if(i-k>=poz[first] && last>=0)
        pop_back();

       // printf("%d %d %d %d %d   %d   %d\n",i,x,k,poz[first],v[first],first,last);


        //printf("%d ",suma);

       /* for(j=first;j<=last;j++)
        printf("%d ",v[j]);
        printf("\n"); */
    }


    fprintf(g,"%lld",suma);


}