Cod sursa(job #1452185)

Utilizator astronoviceAlexandru Pana astronovice Data 20 iunie 2015 11:46:29
Problema Deque Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <iostream>

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) {
    cout << "Front: " << front << " Back: " << back << endl;
    // Remove elements greater than E[i], since E[i] will be the minimum
    while (front <= back && E[D[back]] > E[i]) {
      back -= 1;
    }

    cout << "PUSH " << back + 1 << " " << E[i] << endl;
    D[++back] = i;

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

    if (i >= k - 1) {
      sum += E[D[front]];
      cout << "ADD " << E[D[front]] << endl;
    }
  }

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