Cod sursa(job #74728)

Utilizator fogggabTassadar fogggab Data 27 iulie 2007 21:01:23
Problema Secventa Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
int a[500001],c[500001];

int merge(int l,int r) /* Merge-sort, c segedtomb */
{
int x,y,i;
if (l!=r ) {
  merge(l,(l+r-1)/2);
  merge((l+r-1)/2+1,r);  
  x=l;
  y=(l+r-1)/2+1;
  for (i=l;i<=r;i++)
     if (y==(r+1)) {c[i]=a[x];x++;} else 
     {if (x==(l+r-1)/2+1) {c[i]=a[y];y++;}
     else if (a[x]>a[y]) {c[i]=a[y];y++;}
             else {c[i]=a[x];x++;} }
  for (i=l;i<=r;i++) a[i]=c[i];
  }
return 0;
}

int main()
{
FILE *f;
long m,i,j,kmin,pmin,ind1,ind2,k,h;

f=fopen("secventa.in","r");
fscanf(f,"%ld%ld",&m,&k);
ind1=1;
ind2=0;
a[0]=-31000;
kmin=-a[0];pmin=k;
for (i=1;i<=k;i++) {
  fscanf(f,"%ld",&h);    
  for (j=0;h<a[ind2];ind2--) {}
  ind2++;
  a[ind2]=h;
  c[i]=h;
  if (h<kmin) {kmin=h;}
  }
pmin=k;
for (i=k+1;i<=m;i++) {
  fscanf(f,"%ld",&h);    
  for (j=0;h<a[ind2];ind2--) {}
  ind2++;
  a[ind2]=h;
  c[i]=h;
  if (c[i-k]==a[ind1]) {a[ind1]=-31000;ind1++;}
  if (a[ind1]>kmin) {kmin=a[ind1];pmin=i;}
  }
fclose(f);
f=fopen("secventa.out","w");
fprintf(f,"%ld %ld %ld",pmin-k+1,pmin,kmin);
fclose(f);
return 0;
}