Cod sursa(job #2622802)

Utilizator euyoTukanul euyo Data 1 iunie 2020 21:15:45
Problema Deque Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
#define MAX 5000000 //2^23

int v[MAX], deq[MAX];

int b, e;

void popBack() {
  e = (e - 1 + MAX) % MAX;
}
void popFront() {
  b = (b + 1) % MAX;
}
void pushBack( int val ) {
  deq[e] = val;
  e = (e + 1) % MAX;
}
int qempty() {
  return b == e;
}
void update( int val ) {
  while ( !qempty() && deq[e - 1] > val ) {
    popBack();
  }
}
int main() {
  FILE *fin = fopen( "deque.in", "r" );
  FILE *fout = fopen( "deque.out", "w" );
  int n, k, i;
  long long sum;
  
  fscanf( fin, "%d%d", &n, &k );
  for ( i = 0; i < n; ++i ) {
    fscanf( fin, "%d", &v[i] ); 
  }
  pushBack( v[0] );
  for ( i = 1; i < k; ++i ) {
	update( v[i] );
	pushBack( v[i] );
  }
  sum = deq[b];
  for ( i = 1; i <= n - k; ++i ) {
	update( v[i + k - 1] );
	pushBack( v[i + k - 1] );
	if ( deq[b] == v[i - 1] ) {
	  popFront();
	}
	sum += deq[b];
  }
  fprintf( fout, "%lld", sum );
  fclose( fin );
  fclose( fout );
}