Cod sursa(job #1418231)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 12 aprilie 2015 14:19:56
Problema Deque Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 5000000
int stiv[MAXN],poz[MAXN],v[MAXN];
int main(){
    FILE*fi,*fout;
    int istiv,k,n,e,b,i;
    long long s;
    fi=fopen("deque.in" ,"r");
    fout=fopen("deque.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&k);
    for(i=0;i<n;i++)
        fscanf(fi,"%d" ,&v[i]);
    istiv=-1;
    for(i=0;i<k;i++){
        while(istiv>=0&&stiv[istiv]>=v[i])
            istiv--;
        stiv[++istiv]=v[i];
        poz[istiv]=i;
    }
    b=0;
    e=istiv;
    s=stiv[b];
    for(i=k;i<n;i++){
        if(poz[b]<i-k+1)
           b++;
        while(e>=b&&stiv[e]>=v[i])
            e--;
        stiv[++e]=v[i];
        poz[e]=i;
        s=s+stiv[b];
    }
    fprintf(fout,"%lld" ,s);
    fclose(fi);
    fclose(fout);
    return 0;
}