Cod sursa(job #27846)

Utilizator k_ounu_eddyIacob Eduard k_ounu_eddy Data 7 martie 2007 10:38:11
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<stdio.h>
FILE* f= fopen("secventa.in", "rt");
FILE* g = fopen("secventa.out", "wt");
using namespace std;
long int contor=0,N,K,treaba,max,PozInit,PozFin;

struct nod
{nod *urm;
nod *ant;
long int info,pozitie;};
nod *primul,*ultimul;

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

void sterge_ultimul()
{nod *aux=ultimul->ant;
aux->urm=0;
delete ultimul;
ultimul=aux;
contor--;
if(contor==0)
  primul=ultimul=0;
}

void sterge_primul()
{nod *aux=primul->urm;
aux->ant=0;
delete primul;
primul=aux;
contor--;
if(contor==0)
  primul=ultimul=0;
}

int main()
{fscanf(f,"%ld %ld",&N,&K);
for(long int i=1;i<=K;i++)
  {long int aux;
   fscanf(f,"%ld",&aux);
   if(i!=1)
   while(ultimul->info>aux)
     sterge_ultimul();
   adauga(aux);
  }
max=primul->info;
PozInit=1; long int AuxPozInit=1;
PozFin=K;  long int AuxPozFin=K;
for(long int i=K+1;i<=N;i++)
  {
  AuxPozInit++;
  AuxPozFin++;
  long int aux;
  fscanf(f,"%ld",&aux);
  while(ultimul->info>aux)
     sterge_ultimul();
  adauga(aux);
  if(ultimul->pozitie-primul->pozitie>=K)
    sterge_primul();
  if(max<primul->info)
    {
    max=primul->info;
    PozInit=AuxPozInit;
    PozFin=AuxPozFin;
    }
  }
fprintf(g,"%ld %ld %ld",PozInit,PozFin,max);
return 0;}