Cod sursa(job #1076527)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 10 ianuarie 2014 12:39:20
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <cstdio>
#include <deque>
using namespace std;

int v[5000001];

int main()
{
  FILE *in, *out;
  
  in  = fopen ("deque.in",  "r");
  out = fopen ("deque.out", "w");

  deque <int> dq; 
  long long suma = 0;

  int n, k; fscanf (in, "%d %d", &n, &k);
  for (int i = 1; i <= n; ++i)
      fscanf (in, "%d", &v[i]);

  for (int i = 1; i <= n; ++i)
    {
      while (dq.size() > 0 && dq.front() <= dq.back() && v[i] <= v[dq.back()]) 
	dq.pop_back();

      dq.push_back(i);

      if (dq.front() == i - k)
	dq.pop_front();

      if (i >= k)
	suma += v[dq.front()];
    }

  fprintf (out, "%lld\n", suma);

  fclose (in);
  fclose (out);

  return 0;
}