Pagini recente » Cod sursa (job #629806) | Cod sursa (job #1950709) | Cod sursa (job #260825) | Cod sursa (job #300399) | Cod sursa (job #331910)
Cod sursa(job #331910)
#include<stdio.h>
#include<string.h>
#define dim 200020
struct heap{unsigned int a,ord;}v[dim];
int poz[dim];
unsigned int ok,x,i,n;
void swap(int a,int b){
heap c;
c=v[a];v[a]=v[b];v[b]=c;
poz[v[a].ord]=a;poz[v[b].ord]=b;
}
void insert(int val){
n++;
v[n].a=val;
v[n].ord=n;
poz[n]=n;
int m=n;
while(v[m].a<v[m/2].a&&(m/2))
{swap(m,m/2);m/=2;}
}
void del(int x){
unsigned int m;
m=poz[x];
v[poz[x]].a=-1;
while(m<=n)
if(v[2*m+1].a<v[2*m].a&&v[2*m+1].a<v[m].a&&(2*m+1)<=n){swap(m,2*m+1);m=2*m+1;}
else
if(v[2*m].a<v[m].a&&2*m<=n){swap(m,2*m);m=2*m;}
else
break;
}
void citire(){
int i,n,ok,x;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
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;}