Cod sursa(job #1904924)

Utilizator ReksioCroftOctavian Florin Staicu ReksioCroft Data 5 martie 2017 20:49:03
Problema Deque Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>

#define nmax  5000000

int deque[nmax], v[nmax];

int main() {
  int n, k, nr, start, stop, i;
  long long sum;
  FILE *fin, *fout;
  fin = fopen( "deque.in", "r" );
  fscanf( fin, "%d%d", &n, &k );
  start = 0;
  stop = -1;
  sum = 0LL;
  for ( i = 0; i < n; i++ ) {
    fscanf( fin, "%d", &v[i] );
    while ( start <= stop && v[i] <= v[ deque[stop] ] )   //cat timp putem scoate din deque elementele ce nu sunt maxime
      stop--;
    deque[++stop] = i;                         //elementul curent ca fi candva minimul=> ii adaugam poizita in deque
    if ( stop - start == k )                   //scoate din deakue elementul mai indepartat de k pozitii
      start++;
    if( i >= k - 1 )                           //daca avem o fereastra glisanta completa
      sum += deque[start];                     //pe pozitia start e afla minimul din aceasta
  }
  fclose( fin );
  fout = fopen( "deque.out", "w" );
  fprintf( fout, "%lld\n", sum );
  fclose( fout );
  return 0;
}