Cod sursa(job #1492377)

Utilizator stoianmihailStoian Mihail stoianmihail Data 27 septembrie 2015 17:20:16
Problema Deque Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>

#define Nadejde 5000001

int N, K;
int lo = 1, hi;
int val[Nadejde];
int deque[Nadejde];

void left(int pos) {
  if (pos - deque[lo] == K) {
    lo++;
  }
}

void right(int pos) {
  while ((lo <= hi) && (val[pos] <= val[deque[hi]])) {
    hi--;
  }
  deque[++hi] = pos;
}

int main(void) {
  int i;
  long long int sum = 0;
  FILE *f = fopen("deque.in", "r");

  fscanf(f, "%d %d", &N, &K);
  for (i = 1; i <= N; i++) {
    fscanf(f, "%d", &val[i]);

    left(i);
    right(i);
    if (i >= K) {
      sum += val[deque[lo]];
    }
  }
  fclose(f);

  f = fopen("deque.out", "w");
  fprintf(f, "%lld\n", sum);
  fclose(f);

  /// Multumim Doamne!
  puts("Doamne ajuta!");
  return 0;
}