Pagini recente » Rating Dragan Daniela (dana88) | Cod sursa (job #2893230) | Cod sursa (job #2419691) | Cod sursa (job #1778823) | Cod sursa (job #127234)
Cod sursa(job #127234)
#include<stdio.h>
long int n,k,i,a,lh,val[500001],ind[500001],poz[500001],iu,id,vb,ps,pf,pswap,aux,aa;
void heapup(long int ic);
void heapdown(long int ic);
void swap(long int i1,long int i2);
int main()
{
FILE *f,*g;f=fopen("secventa.in","r");g=fopen("secventa.out","w");
fscanf(f,"%ld%ld",&n,&k);
for(i=1;i<=k;i++){fscanf(f,"%ld",&a);lh++;val[lh]=a;ind[lh]=i;poz[i]=i;heapup(lh);}
id=1;iu=k;vb=val[1];ps=1;pf=k;
while(iu<n)
{ fscanf(f,"%ld",&a);
pswap=poz[id];
id++;
iu++;
aa=val[pswap];
val[pswap]=a;
ind[pswap]=iu;
poz[iu]=pswap;
if(a<aa) heapup(pswap);else heapdown(pswap);
if(val[1]>vb){ps=id;pf=iu;vb=val[1];}
}
fprintf(g,"%ld %ld %ld\n",ps,pf,vb);
fcloseall();
return 0;
}
void heapup(long int ic)
{
long int is;
is=ic/2;
if(is)
if(val[ic]<val[is])
{swap(is,ic);heapup(is);}
}
void heapdown(long int ic)
{
long int is,is1;
is=2*ic;is1=2*ic+1;
if(is>lh)return;
if(is<lh)if(val[is1]<val[is])is=is1;
if(val[is]<val[ic]) { swap(is,ic);heapdown(is);}
}
void swap(long int i1,long int i2)
{
aux=val[i1];val[i1]=val[i2];val[i2]=aux;
aux=ind[i1];ind[i1]=ind[i2];ind[i2]=aux;
poz[ind[i1]]=i1;poz[ind[i2]]=i2;
}