Cod sursa(job #3325309)

Utilizator Coman_DianaComan Diana Coman_Diana Data 25 noiembrie 2025 11:39:33
Problema Deque Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>
#include <stdlib.h>

#define NMAX 5000000

int vec[NMAX + 1], deque[NMAX + 1];
int first, size;

int push_back( int val ) {
  if ( size == NMAX )
    return 0;

  deque[(first + size) % NMAX] = val;
  size++;
  return 1;
}

int pop_front() {
  if ( size == 0 )
    return 0;

  first++;
  if ( first == NMAX )
    first = 0;
  size--;
  return 1;
}

int pop_back() {
  if ( size == 0 )
    return 0;

  size--;
  return 1;
}

int front() {
  if ( size > 0 )
    return deque[first];
  return -1;
}

int back() {
  if ( size > 0 )
    return deque[(first + size - 1) % NMAX];
  return -1;
}

int main()
{
    FILE *fin, *fout;

    long long sum;
    int num_n, num_k, ind;

    fin = fopen( "deque.in", "r" );
    fscanf( fin, "%d%d", &num_n, &num_k );

    sum = 0;

    for ( ind = 1; ind <= num_n; ind++ ) {

        fscanf( fin, "%d", &vec[ind] );
        while ( size > 0 && vec[back()] >= vec[ind] )
          pop_back();

        push_back( ind );

        if ( front() <= ind - num_k )
          pop_front();

        if ( ind >= num_k )
          sum = sum + vec[front()];

    }
    fclose( fin );

    fout = fopen( "deque.out", "w" );
    fprintf( fout, "%lld\n", sum );
    fclose( fout );
    return 0;
}