Pagini recente » Cod sursa (job #2793391) | Cod sursa (job #246789) | Cod sursa (job #2453192) | Cod sursa (job #1246265) | Cod sursa (job #27846)
Cod sursa(job #27846)
#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;}