Cod sursa(job #631711)

Utilizator mr.johnFMI - Laceanu Ionut-Adrian mr.john Data 9 noiembrie 2011 17:49:14
Problema Deque Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 1.75 kb
#include <stdio.h>
#include <fstream>
#include <cstdlib>

using namespace std;

int coada[5000001];
int dreapta=0,stanga=1,vector[5000001],lungime,k;

int citire_vector()
{
  scanf("%d %d",&lungime,&k);
  for (int i=0;i<lungime;i++)
  {
    scanf("%d",&vector[i]);
  }
}

/*void afisare_vector()
{
  for (int i=0;i<lungime;i++)
  {
    cout<<vector[i]<<", ";
  }
}
*/
bool push_stanga(int x)
{
  if (dreapta<5000000)
  {
    for (int i=++dreapta; i>stanga; i--)
      coada[i]=coada[i-1];
    coada[stanga]=x;
    return 1;
  }
  else
     return 0;
}

bool push_dreapta(int x)
{
  if (dreapta<5000000)
  {
    coada[++dreapta]=x;
    return 1;
  }
  else
     return 0;
}

int pop_dreapta()
{
  if (stanga<=dreapta)
    return coada[dreapta--];
  else
    return 0;
}

int pop_stanga()
{
  if (stanga<=dreapta)
    return coada[stanga++];
  else
    return 0;
}

/*bool afisare()
{
  if (stanga<=dreapta)
  {
    cout <<"coada este: ";
    for (int i=stanga;i<=dreapta;i++)
      cout <<vector[coada[i]]<<" ";
  }
  else
    cout <<"coada este goala!";
}*/

int main()
{
  int n,suma=0;
  ifstream fin("deque.in");
  ofstream fout("deque.out");
  //scanf("%d %d ",&lungime,&k);
  fin>>lungime>>k;
  for (int i=0;i<lungime;i++)
  {
    //scanf("%d ",&vector[i]);
    fin>>vector[i];
  }  
  for (int i=0;i<lungime;i++)
  {
    if (coada[stanga]<i-k+1)
      pop_stanga();
    while ((vector[i]<=vector[coada[dreapta]]) and (stanga<=dreapta))
      pop_dreapta();
    push_dreapta(i);
      if (i>=k-1)
      //{
      //  printf("%d",vector[coada[stanga]]);
        suma+=vector[coada[stanga]];
      //}
  }
  fout<<suma;
//  printf("%d\n",suma);
//  system ("PAUSE");
  return 0;
}