Cod sursa(job #1452187)

Utilizator astronoviceAlexandru Pana astronovice Data 20 iunie 2015 11:50:24
Problema Deque Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <fstream>

using namespace std;

#define MAX_N 5000000

int E[MAX_N], D[MAX_N];
int front = 0, back = -1;

int main() {
  ifstream fin("deque.in");
  ofstream fout("deque.out");

  int n, k;
  fin >> n >> k;

  for (int i = 0; i < n; ++i) {
    fin >> E[i];
  }

  int sum = 0;
  
  for (int i = 0; i < n; ++i) {
    // Remove elements greater than E[i], since E[i] will be the minimum
    while (front <= back && E[D[back]] > E[i]) {
      back -= 1;
    }

    D[++back] = i;

    if (D[front] == i - k) {
      front++;
    }

    if (i >= k - 1) {
      sum += E[D[front]];
    }
  }

  fout << sum;
  
  fin.close();
  fout.close();
}