Pagini recente » Cod sursa (job #2953594) | Cod sursa (job #1339383) | Cod sursa (job #2698652) | Cod sursa (job #397636) | Cod sursa (job #523882)
Cod sursa(job #523882)
#include<iostream.h>
#include<fstream.h>
#define N 200001
int z;
long h[N],n,k=0,i,p,r,poz[N];
void add(long h[N],long *n,long k,long poz[N])
{h[++(*n)]=k;
poz[h[(*n)]]=(*n);
long t=(*n),key,x,y;
key=h[t];
x=poz[h[t/2]];
y=poz[h[t]];
while(t>1&&key<h[t/2])
{poz[h[t/2]]=y;
y=x;
h[t]=h[t/2];
t/=2;}
poz[key]=t;
h[t]=key;}
void del(long h[N],long *n,long k,long poz[N])
{long key,son,aux,x,y,z,w;
h[k]=h[(*n)--];
poz[h[k]]=k;
if(k>1&&h[k]<h[k/2])
{key=h[k];
x=poz[h[k/2]];
y=poz[h[k]];
while(k>1&&key<h[k/2])
{poz[h[k/2]]=y;
y=x;
h[k]=h[k/2];
k/=2;}
poz[key]=k;
h[k]=key;}
else
{do
{son=0;
if(2*k<=(*n))
{son=2*k;
if(2*k+1<=(*n)&&h[2*k+1]<h[2*k])
son=2*k+1;
if(h[son]>=h[k])
son=0;}
if(son)
{aux=h[k];
h[k]=h[son];
h[son]=aux;
z=poz[h[son]];
w=poz[h[k]];
poz[h[k]]=z;
poz[h[son]]=w;
k=son;}}
while(son);}}
int main()
{ifstream f1("heapuri.in");
ofstream f2("heapuri.out");
f1>>n;
for(i=1;i<=n;i++)
{f1>>z;
if(z==3)
f2<<h[1]<<endl;
else
{f1>>r;
if(z==1)
add(h,&k,r,poz);
else
del(h,&k,poz[h[r]],poz);}}
f1.close();
f2.close();
return 0;}