Cod sursa(job #2077111)

Utilizator Stefan_RaduStefan Radu Stefan_Radu Data 27 noiembrie 2017 18:45:37
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <deque>
#include <vector>

using namespace std;

ifstream cin("deque.in");
ofstream cout("deque.out");

void Solve(int n, int k, vector < int > &v, deque < int > &deq) {

  long long ans = 0;
  for (int i = 1; i <= k; i ++) {

    while (deq.size() and v[i] <= v[deq.front()]) {
      deq.pop_front();
    }
    deq.push_front(i);
  }

  ans += v[deq.back()];
  for (int i = k + 1; i <= n; i ++) {

    while (deq.size() and v[i] <= v[deq.front()]) {
      // cout << "========== l-am scos pe " << v[deq.front()] << '\n';
      deq.pop_front();
    }
    deq.push_front(i);
    if (deq.back() <= i - k) {
      deq.pop_back();
    }

    ans += v[deq.back()];
  }

  cout << ans << '\n';
}

int main() {
  
  int n, k;
  cin >> n >> k;

  vector < int > v(n + 1);
  for (int i = 1; i <= n; i ++) {
    cin >> v[i];
  }

  deque < int > deq;
  Solve(n, k, v, deq);
}