Cod sursa(job #2575091)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 6 martie 2020 11:36:16
Problema Deque Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>

using namespace std;

const int NMAX = 5000000;
const int KMAX = 5000000;

int v[NMAX + 1];
int dq[KMAX + 1];
int first, last;

static inline int pop_front(){
  first = (first + 1) % KMAX;
  return dq[first];
}

static inline int pop_back(){
  last = (last - 1 + KMAX) % KMAX;
  return dq[last];
}

static inline void push_front(int val){
  first = (first - 1 + KMAX) % KMAX;
  dq[first] = val;
}

static inline void push_back(int val){
  last = (last + 1) % KMAX;
  dq[last] = val;
}

static inline int empty(){
  return (first == last);
}

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

int main() {
  int n, k, i, s;
  fin >> n >> k;
  s = 0;
  for( i = 1; i <= n; ++i ){
    fin >> v[i];
    while( !empty() && v[i] <= v[dq[last]] )
      pop_back();
    push_back(i);
    if( i - k == dq[(first + 1) % KMAX])
      pop_front();
    if( i >= k )
      s += v[dq[(first + 1) % KMAX]];
  }
  fout << s;
  return 0;
}