Pagini recente » Cod sursa (job #640847) | Cod sursa (job #1654739) | Cod sursa (job #725991) | Cod sursa (job #620330) | Cod sursa (job #331423)
Cod sursa(job #331423)
#include<stdio.h>
#include<string.h>
#define dim 200020
unsigned int v[dim],ord[dim],poz[dim];
unsigned int ok,x,i,n;
void swap(int a,int b){
int c;
c=v[a];v[a]=v[b];v[b]=c;
c=ord[a];ord[a]=ord[b];ord[b]=c;
c=poz[ord[a]];poz[ord[a]]=poz[ord[b]];poz[ord[b]]=c;
}
void insert(int val){
n++;
v[n]=val;
ord[n]=n;
poz[n]=n;
int m=n;
while(v[m]<v[m/2]&&(m/2))
{swap(m,m/2);m/=2;}
}
void del(int x){
unsigned int m,test=0;
m=poz[x];
swap(n,poz[x]);
v[n]=-1;
n--;
while(m<=n/2)
if(v[m*2]<v[m*2+1]&&v[m*2]<v[m]){swap(m,m*2);m=m*2;}
else
if(v[m*2+1]<v[m*2]&&v[m*2+1]<v[m]){swap(m,m*2+1);m=m*2+1;}
else
break;
}
void citire(){
int i,n,ok,x;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
memset(v,1,sizeof(v));
for(i=1;i<=n;i++)
{scanf("%d",&ok);
switch (ok){
case 1:scanf("%d",&x);insert(x);break;
case 2:scanf("%d",&x);del(x);break;
case 3:printf("%d\n",v[1]);break;}
}
}
int main(){
citire();
return 0;}