Cod sursa(job #1490955)

Utilizator baban_bogdanbaban bogdan baban_bogdan Data 24 septembrie 2015 15:35:11
Problema Deque Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.67 kb
#include <stdio.h>
#include <stdlib.h>
int v[5000001];
int d[5000001];
int dr=-1,st=0,n,k;

void stanga(int i){
    if(d[st]==i-k)
        st++;
}
void dreapta (int i){
    while( st<=dr && v[i]<v[d[dr]] )
        dr--;
    d[++dr]=i;
}
int main()
{

    FILE *fin, *fout;
    int i;
    long long suma=0;

    fin=fopen("deque.in" , "r" );
    fout=fopen("deque.out" , "w" );
    fscanf(fin, "%d%d" , &n,&k);

    for (i=0;i<n;i++)
        fscanf(fin, "%d" , &v[i]);

    for(i=0;i<n;i++){
        if(i>=k) stanga(i);
        dreapta(i);
        if(i>=k-1)
            suma=suma+v[d[st]];
    }
    fprintf(fout, "%lld" , suma);
    fclose(fin);
    fclose(fout);
    return 0;
}