Cod sursa(job #2294630)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 2 decembrie 2018 17:03:31
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>

using namespace std;


FILE *fin = fopen ("deque.in", "r"), *fout = fopen ("deque.out", "w");

const int MAXN = 5e6;

int dq[MAXN + 1], a[MAXN + 1];

int main() {
  int st, dr, i, n, k;
  long long sol;
  fscanf (fin, "%d%d", &n, &k);
  for (i = 1; i <= n; i++) {
    fscanf (fin, "%d", &a[i]);
  }
  st = 0;
  dr = -1;
  sol = 0;
  for (i = 1; i <= n; i++) {
    if (dq[st] && dq[st] <= i - k)
      st++;
    while (dr >= st && a[i] <= a[dq[dr]])
      dr--;
    dq[++dr] = i;
    if (i >= k) {
      sol = sol + a[dq[st]];
      //fprintf (fout, "%d\n", a[dq[st]]);
    }
  }
  fprintf (fout, "%lld\n", sol);
  fclose (fin);
  fclose (fout);
  return 0;
}