Cod sursa(job #2677573)

Utilizator Ana_22Ana Petcu Ana_22 Data 26 noiembrie 2020 20:38:12
Problema Deque Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 5000000
#define QMAX NMAX
//nu am facut circular pentru ca k <= n
int v[NMAX];
int c[QMAX];
int prim, ultim;

static inline void pop() {
  ultim--;
}

static inline void enque( int e ) {
  c[ultim] = e;
  ultim++;
}

static inline void deque() {
  prim++;
}

static inline int emptyque() {
  return prim == ultim;
}

int main() {
    FILE *fin, *fout;
    int n, k, i;
    long long s;
    fin = fopen( "deque.in", "r" );
    fscanf( fin, "%d%d", &n, &k );
    for( i = 0; i < k; i++ ) {
      fscanf( fin, "%d", &v[i] );
      while( !emptyque() && v[i] < v[c[ultim-1]] )
        pop();
      enque( i );
    }
    s = v[c[prim]];
    for( i = 0; i < n - k; i++ ) {
      fscanf( fin, "%d", &v[i+k] );
      if( i == c[prim] )
        deque();
      while( !emptyque() && v[i+k] < v[c[ultim-1]] )
        pop();
      enque( i + k );
      s += v[c[prim]];
    }
    fclose( fin );
    fout = fopen( "deque.out", "w" );
    fprintf( fout, "%lld", s );
    fclose( fout );
    return 0;
}