Cod sursa(job #2676754)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 24 noiembrie 2020 22:01:15
Problema Deque Scor 15
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define MAXN 5000000

FILE *fin, *fout;

int readInt(){
  int n;
  char ch;

  while(!isdigit(ch = fgetc(fin)));

  n = ch - '0';
  while(isdigit(ch = fgetc(fin))){
    n = n * 10 + ch - '0';
  }
  return n;
}

int deque[MAXN], poz[MAXN];

int main()
{
    int n, k, i, el, p, u;
    long long s;
    fin = fopen("deque.in", "r");
    n = readInt();
    k = readInt();
    s = 0;
    p = u = 0;
    for(i = 0; i < k; i++){
      el = readInt();
      while((p < u) && (el < deque[(u - 1) % k])){
        u--;
      }
      deque[u % k] = el;
      poz[u % k] = i;
      u++;
    }
    s += deque[p % k];
    for(; i < n; i++){
      el = readInt();
      if((i - poz[p % k]) == k){
        p++;
      }
      while((p < u) && (el < deque[(u - 1) % k])){
        u--;
      }
      deque[u % k] = el;
      poz[u % k] = i;
      s += deque[p % k];
      u++;
    }
    fclose(fin);
    fout = fopen("deque.out", "w");
    fprintf(fout, "%lld", s);
    fclose(fout);
    return 0;
}