Cod sursa(job #2675769)

Utilizator LucaMihaiLM10Luca Ilie LucaMihaiLM10 Data 22 noiembrie 2020 15:06:49
Problema Deque Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>
#define MAX_N 5000000
int v[MAX_N], coada[MAX_N];
int first, size;
void push_back( int x ) {
    coada[first + size] = x;
    size++;
}
int pop_front() {
    if ( size == 0 )
        return 0;
    first++;
    size--;
    return 1;
}
int pop_back() {
    if ( size == 0 )
        return 0;
    size--;
    return 1;
}
int front() {
    return size > 0 ? coada[first] : -1;
}
int back() {
    return size > 0 ? coada[(first + size - 1) % MAX_N] : -1;
}
int main() {
    FILE *fin, *fout;
    int n, k, t, i;
    long long s;
    fin = fopen( "deque.in", "r" );
    fscanf( fin, "%d%d", &n, &k );
    s = first = size = 0;
    for ( i = 0; i < n; i++ ) {
        fscanf( fin, "%d", &v[i] );
        t = back();
        while ( t >= 0 && v[i] <= v[t] ) {
            pop_back();
            t = back();
        }
        push_back( i );
        if ( i >= k - 1 ) {
            s += v[front()];
            if ( front() == i - k + 1 )
                pop_front();
        }
    }
    fclose( fin );
    fout = fopen( "deque.out", "w" );
    fprintf( fout, "%lld", s );
    fclose( fout );
    return 0;
}