Cod sursa(job #3170796)

Utilizator vladimir.gavris.1Gavris Mihai Vladimir vladimir.gavris.1 Data 18 noiembrie 2023 09:59:31
Problema Deque Scor 60
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 5000000

int coada[ MAXN ], a[ MAXN ], left, right = -1;

int isempty( )
{
    if( left <= right )
        return 0;
    return 1;
}

int front( )
{
    return coada[ right ];
}

int back( )
{
    return coada[ left ];
}

void pop_fr( )
{
    right--;
}

void pop_bk( )
{
    left++;
}

void push_fr( int a )
{
    right++;
    coada[ right ] = a;
}

int main()
{
    FILE *fin, *fout;
    int n, k, i, j, x;
    long long suma = 0;
    fin = fopen( "deque.in", "r" );

    fscanf( fin, "%d%d", &n, &k );
    for( i = 0; i < n; i++ )
    {
        fscanf( fin, "%d", &a[ i ] );
    }
    fclose( fin );

    for( i = 0; i < n; i++ )
    {
        while( a[ i ] <= a[ front( ) ] && isempty( ) == 0 )
        {
            pop_fr( );
        }

        while( back( ) <= i - k && isempty( ) == 0)
        {
            pop_bk( );
        }

        push_fr( i );
        if( i >= k - 1 )
        {
            suma += a[ back( ) ];
        }
    }

    fout = fopen( "deque.out", "w" );
    fprintf( fout, "%lld", suma );
    fclose( fout );

    return 0;
}