Pagini recente » Cod sursa (job #1758115) | Cod sursa (job #1572582) | Cod sursa (job #1203326) | Cod sursa (job #2139813) | Cod sursa (job #771661)
Cod sursa(job #771661)
#include<stdio.h>
#define dim 200010
FILE*f=fopen("heapuri.in","r");
FILE*g=fopen("heapuri.out","w");
int aux;
int V[dim],P[dim],H[dim],n,dh,k,x,op,i;
void up(int y){
int c=y;
int p=y/2;
while(p!=0){
if(V[H[p]]>V[H[c]]){
aux=H[p];
H[p]=H[c];
H[c]=aux;
P[H[p]]=p;
P[H[c]]=c;
c=p;
p/=2;
}
else
break;
}
}
void down(int y){
int p=y;
int c=p*2;
while(c<=dh){
if(c<dh&&V[H[c]]>V[H[c+1]])
c++;
if(V[H[p]]>V[H[c]]){
aux=H[p];
H[p]=H[c];
H[c]=aux;
P[H[c]]=c;
P[H[p]]=p;
p=c;
c=2*p;
}
else
break;
}
}
int main(){
fscanf(f,"%d",&n);
for(i=1;i<=n;i++){
fscanf(f,"%d",&op);
switch(op){
case 1:
fscanf(f,"%d",&V[++k]);
H[++dh]=k;
P[k]=dh;
up(dh);
break;
case 2:
fscanf(f,"%d",&x);
H[P[x]]=H[dh];
dh--;
if(V[H[P[x]]]<V[H[P[x]/2]])
up(P[x]);
else
down(P[x]);
break;
default:
fprintf(g,"%d\n",V[H[1]]);
break;
}
}
return 0;
}