Cod sursa(job #2006564)

Utilizator PetrescuAlexandru Petrescu Petrescu Data 30 iulie 2017 18:21:10
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#define MAX 5000000

using namespace std;
struct Deque
{
  int poz;
  int elem;
};
Deque v[MAX];
int a[MAX];
int st, dr;
void push_back(int stuff, int ord, int n)
{
  v[dr].elem = stuff;
  v[dr].poz = ord;
  dr = (dr + 1) % n;
}
void pop_back(int stuff, int ord, int n)
{
  if(st != dr)
  {
    if(dr == 0)dr = n;
    while(st != dr && stuff < v[dr - 1].elem)
    {
      dr--;
      if(st != dr && dr == 0)dr = n;
    }
  }
  push_back(stuff, ord, n);
}
void pop_front(int n)
{
  st = (st + 1) % n;
}
int main()
{
  FILE *fin, *fout;
  int n, k, i;
  long long int suma = 0;

  fin = fopen("deque.in", "r");
  fout = fopen("deque.out", "w");
  fscanf(fin, "%d %d", &n, &k);
  for(i = 0; i < n; i++)fscanf(fin, "%d", &a[i]);
  for(i = 0; i < k; i++)pop_back(a[i], i, n);
  suma = v[st].elem;
  for(i = k; i < n; i++)
  {
    if(v[st].poz <= i - k)pop_front(n);
    pop_back(a[i], i, n);
    suma += v[st].elem;
  }
  fprintf(fout, "%lld", suma);
  fclose( fin );
  fclose( fout );
  return 0;
}