Cod sursa(job #1051456)

Utilizator impulseBagu Alexandru impulse Data 10 decembrie 2013 02:14:53
Problema Deque Scor 25
Compilator c Status done
Runda Arhiva educationala Marime 0.85 kb
//
//  main.c
//  deque
//
//  Created by Alexandru Bâgu on 12/10/13.
//  Copyright (c) 2013 Alexandru Bâgu. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[])
{
    const int MAX = 5000000;
    
    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);
    
    long mins = 0;
    
    int N, K;
    scanf("%d %d", &N, &K);
    int *STK = malloc(MAX * sizeof(int)),
        *DEQ = malloc(MAX * sizeof(int));
    int v, i, f = 0, b = 0;
    for(i = 0; i < MAX; i++)
        STK[i] = DEQ[i] = 0;
    
    for(i = 1; i <= N; i++)
    {
        scanf("%d ", STK + i);
        while (b - f > 0 && STK[i] <= STK[DEQ[b - 1]])
            b--;
        DEQ[b++] = i;
        if(i - K == DEQ[f])
            f++;
        if(i >= K)
            mins += STK[DEQ[f]];
    }
    
    printf("%ld", mins);
    
    return 0;
}