Cod sursa(job #1475687)

Utilizator salam1Florin Salam salam1 Data 24 august 2015 11:44:25
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
#include <deque>
using namespace std;
const int NMAX = 5000005;
int n, k, A[NMAX];
deque<int> Q;

void read() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++)
    scanf("%d", &A[i]);
}

void insertDeque(int pos) {
  while (!Q.empty() && A[pos] <= A[Q.back()])
    Q.pop_back();
  Q.push_back(pos);
}

void removeOutdated(int pos) {
  if (!Q.empty() && Q.front() == pos - k) Q.pop_front();
}

void solve() {
  for (int i = 1; i <= k; i++) {
    insertDeque(i);
  }
  long long res = A[Q.front()];
  for (int i = k + 1; i <= n; i++) {
    removeOutdated(i);
    insertDeque(i);
    res += A[Q.front()];
  }
  
  printf("%lld\n", res);
}

int main() {
  freopen("deque.in", "r", stdin);
  freopen("deque.out", "w", stdout);

  read();
  solve();
  return 0;
}