Cod sursa(job #2666227)

Utilizator YusyBossFares Yusuf YusyBoss Data 1 noiembrie 2020 11:18:56
Problema Deque Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <stdio.h>
#define MOD (1 << 23)
#define NMAX 5000000

using namespace std;

int deque[MOD + 1], v[NMAX + 1];

int main() {
  FILE *fin, *fout;
  int n, k, i, st, dr, lung, sum;

  fin = fopen("deque.in", "r");
  fscanf(fin, "%d%d", &n, &k);

  lung = st = 0;
  dr = -1;
  for (i = 0; i < k; i++) {
    fscanf(fin, "%d", &v[i]);

    while (lung > 0 && v[i] <= v[deque[dr]]) {
      dr = (dr - 1 + MOD) % MOD;
      lung--;
    }

    dr = (dr + 1) % MOD;
    deque[dr] = i;
    lung++;
  }

  sum = 0;
  while (i < n) {
    fscanf(fin, "%d", &v[i]);

    sum += v[deque[st]];

    if (i - k == deque[st]) {
      st = (st + 1) % MOD;
      lung--;
    }

    while (lung > 0 && v[i] <= v[deque[dr]]) {
      dr = (dr - 1 + MOD) % MOD;
      lung--;
    }

    dr = (dr + 1) % MOD;
    deque[dr] = i;
    lung++;

    i++;
  }
  sum += v[deque[st]];

  fclose( fin );

  fout = fopen("deque.out", "w");
  fprintf(fout, "%d", sum);
  fclose( fout );
  return 0;
}