Pagini recente » Cod sursa (job #649598) | Cod sursa (job #637194) | Cod sursa (job #2384412) | Cod sursa (job #1175710) | Cod sursa (job #530206)
Cod sursa(job #530206)
#include<fstream.h>
#include<iostream.h>
#define N 200001
int z;
long h[N],n,k=0,i,r,j=0,poz[N],v[N],p=0,q=0;
void add(long h[N],long *n,long k,long poz[N],long v[N],long j)
{(*n)++;
h[(*n)]=j;
poz[j]=(*n);
long t=(*n),key,x,y;
key=h[t];
while(t>1&&v[key]<v[h[t/2]])
{x=h[t];
h[t]=h[t/2];
h[t/2]=x;
y=poz[h[t]];
poz[h[t]]=poz[h[t/2]];
poz[h[t/2]]=y;
t/=2;}}
void del(long h[N],long *n,long k,long poz[N],long v[N])
{long key,son,aux,x,y,z,t;
t=h[k];
h[k]=h[(*n)];
h[(*n)]=t;
z=poz[h[(*n)]];
poz[h[(*n)--]]=poz[h[k]];
poz[h[k]]=z;
if(k>1&&v[h[k]]<v[h[k/2]])
{key=h[k];
x=poz[h[k/2]];
y=poz[h[k]];
while(k>1&&v[key]<v[h[k/2]])
{t=poz[h[k]];
poz[h[k]]=poz[h[k/2]];
poz[h[k/2]]=t;
z=h[k];
h[k]=h[k/2];
h[k/2]=z;
k/=2;}}
else
{do
{son=0;
if(2*k<=(*n))
{son=2*k;
if(2*k+1<=(*n)&&v[h[2*k+1]]<v[h[2*k]])
son=2*k+1;
if(v[h[son]]>=v[h[k]])
son=0;}
if(son)
{aux=h[k];
h[k]=h[son];
h[son]=aux;
t=poz[h[son]];
poz[h[son]]=poz[h[k]];
poz[h[k]]=t;
k=son;}}
while(son);}}
void print(long h[N],long n)
{long i;
for(i=1;i<=n;i++)
printf("%ld ",h[i]);
printf("\n");}
int main()
{ifstream f1("heapuri.in");
ofstream f2("heapuri.out");
f1>>n;
for(i=1;i<=n;i++)
{f1>>z;
if(z==3)
f2<<v[h[1]]<<endl;
else
{f1>>r;
if(z==1)
{v[++j]=r;
add(h,&k,v[j],poz,v,j);}
else
del(h,&k,poz[r],poz,v);}}
f1.close();
f2.close();
return 0;}