Pagini recente » Cod sursa (job #2190457) | Cod sursa (job #2706258) | Cod sursa (job #3124981) | Cod sursa (job #2159598) | Cod sursa (job #523771)
Cod sursa(job #523771)
#include<stdio.h>
#define dim 200005
using namespace std;
int i,n,cod,x,v[dim],k,poz[dim],a;//,coada[dim];
void swap(int &a, int &b)
{int c;
c=a; a=b; b=c;
}
void insert()
{int i;
k++; poz[k]=k;
if(!v[1]) {v[1]=x; poz[1]=1;}
else
{v[k]=x; i=k;
if(v[k/2]>v[k])
while(1 && i>=1)
{swap(v[i],v[i/2]); swap(poz[i],poz[i/2]); i=i/2;
if(v[i/2]<v[i]) break;
}
}
}
void sterg()
{int i;
//for(i=1;i<=k;i++)
//coada[poz[i]]=i;
//x=coada[x];
v[x]=v[k]; v[k]=0; poz[x]=poz[k]; poz[k]=0; i=x; k--;
if(v[i]<v[i/2])
while(1 && i>=1)
{swap(v[i],v[i/2]); swap(poz[i],poz[i/2]); i=i/2;
if(v[i/2]<v[i]) break;
}
if( (v[i]>v[i*2] || v[i]>v[i*2+1]) && (i*2<=k) )
while(1 && i<=k)
{swap(v[i],v[i*2]); swap(poz[i], poz[i*2]); i=i*2;
if(v[i]>v[i*2] || v[i]>v[i*2+1]) break;}
}
int main()
{
FILE *f=fopen("heapuri.in","r"), *g=fopen("heapuri.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
{fscanf(f,"%d",&cod);
if(cod==1) {fscanf(f,"%d",&x); insert();}
else if(cod==2) {fscanf(f,"%d",&x); sterg();}
else fprintf(g,"%d\n",v[1]);
}
fclose(f);
fclose(g);
return 0;
}