Cod sursa(job #27067)

Utilizator k_ounu_eddyIacob Eduard k_ounu_eddy Data 6 martie 2007 01:14:37
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>
FILE* f= fopen("secventa.in", "rt");
FILE* g = fopen("secventa.out", "wt");
long int contor=0;

struct nod
{long int info;
nod* adr_urm;
nod* adr_ant;};
nod *primul,*ultimul;

void adauga(long int informatie)
{
if(!primul)
  {
  contor++;
  primul=new nod;
  primul->adr_urm=0;
  primul->adr_ant=0;
  primul->info=informatie;
  ultimul=primul;
  }
else
  {
  nod *aux;
  aux=new nod;
  aux->adr_urm=0;
  aux->adr_ant=ultimul;
  aux->info=informatie;
  ultimul->adr_urm=aux;
  ultimul=aux;
  contor++;
  }
}

void sterge_ultimul()
{contor--;
nod *aux=ultimul->adr_ant;
aux->adr_urm=0;
ultimul=aux;
if(contor==0)
ultimul=primul=0;}

void sterge_primul()
{
contor--;
nod *aux=primul->adr_urm;
aux->adr_ant=0;
primul=aux;
if(contor==0)
  ultimul=primul=0;
}

int main()
{long int N,K,max;
fscanf(f,"%ld %ld",&N,&K);
for(long int i=1;i<=K;i++)
  {long int numar;
   fscanf(f,"%ld",&numar);
  if(i!=1)
    while(ultimul->info>numar)
      sterge_ultimul();
  adauga(numar);}

max=primul->info;

for(long int i=K+1;i<=N;i++)
  {long int numar;
   fscanf(f,"%ld",&numar);
   contor++;
   if(contor>K)
    sterge_primul();
   contor--;
   
   while(ultimul->info>numar)
      sterge_ultimul();
   adauga(numar);
   if(primul->info>max)
     max=primul->info;
  }
fprintf(g,"%ld",max);
fclose(f);
fclose(g);
return 0;
}