Cod sursa(job #2676746)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 24 noiembrie 2020 21:55:31
Problema Deque Scor 60
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 5000000

int deque[MAXN], poz[MAXN];

int main()
{
    FILE *fin, *fout;
    int n, k, i, el, p, u;
    long long s;
    fin = fopen("deque.in", "r");
    fscanf(fin, "%d%d", &n, &k);
    s = 0;
    p = u = 0;
    for(i = 0; i < k; i++){
      fscanf(fin, "%d", &el);
      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++){
      fscanf(fin, "%d", &el);
      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;
}