Pagini recente » Cod sursa (job #2842371) | Cod sursa (job #143743) | Cod sursa (job #673558) | Arhiva de probleme | Cod sursa (job #2893609)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,v[200005],noduri,heap[200005],poz[200005],op,x,l,nr;
void push(int ind)
{ int aux;
while (ind/2!=0 && v[heap[ind]]<v[heap[ind/2]])
{ aux=heap[ind];
heap[ind]=heap[ind/2];
heap[ind/2]=aux;
poz[heap[ind]]=ind;
poz[heap[ind/2]]=ind/2;
ind=ind/2;
}
}
void pop(int ind)
{ int aux,y=0;
while(ind!=y)
{ y=ind;
if(y*2<=l && v[heap[ind]]>v[heap[y*2]])
ind=y*2;
if(y*2+1<=l && v[heap[ind]]>v[heap[y*2+1]])
ind=y*2+1;
aux=heap[ind];
heap[ind]=heap[y];
heap[y]=aux;
poz[heap[ind]]=ind;
poz[heap[y]]=y;
}
}
int main()
{ f>>n;
for(int i=1;i<=n;i++)
{ f>>op;
if(op==1)
{ f>>x;
l++;
nr++;
v[nr]=x;
heap[l]=nr;
poz[nr]=l;
push(l);
}
if(op==2)
{ f>>x;
v[x]=-1;
push(poz[x]);
poz[heap[1]]=0;
heap[1]=heap[l--];
poz[heap[1]]=1;
if(l>1)
pop(1);
}
if(op==3)
g<<v[heap[1]]<<'\n';
}
return 0;
}