Cod sursa(job #27736)

Utilizator k_ounu_eddyIacob Eduard k_ounu_eddy Data 7 martie 2007 02:08:03
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>
FILE* f= fopen("secventa.in", "rt");
FILE* g = fopen("secventa.out", "wt");
long int deque[500001],N,K,max,primul=1,ultimul,PozPrim=1,PozUltim,AdrAlDoilea,init,fin;

inline void adauga(long int info)
{ultimul++;
PozUltim++;
deque[ultimul]=info;
if(ultimul-primul==1)
  AdrAlDoilea=PozUltim;
}

inline void sterge_ultimul()
{ultimul--;}

inline void sterge_primul()
{primul++;PozPrim=AdrAlDoilea;}

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(aux<deque[ultimul])
      sterge_ultimul();
  adauga(aux);
  }
max=deque[primul];
init=1; long int initaux=1;
fin=K; long int finaux=K;

for(int i=K+1;i<=N;i++)
  {initaux++;
   finaux++;
  long int aux;
  fscanf(f,"%ld", &aux);
  while(aux<deque[ultimul])
    sterge_ultimul();
  adauga(aux);
  if(PozUltim-PozPrim>=K  && primul!=ultimul)
    sterge_primul();
  if(ultimul-primul==1)
    AdrAlDoilea=PozUltim;
  if(deque[primul]>max)
    {max=deque[primul];
    init=initaux;
    fin=finaux;
    }
  }
fprintf(g,"%ld %ld %ld",init+1,fin+1,max);
return 0;
}