Pagini recente » Cod sursa (job #853870) | Cod sursa (job #1776759) | Cod sursa (job #962960) | Cod sursa (job #105314) | Cod sursa (job #854196)
Cod sursa(job #854196)
#include<fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int poz[200000],heap[200000],ordin[200000],k=0,j=0;
void add()
{
int x;
fin>>x;
poz[++k]=++j;
ordin[j]=k;
heap[j]=x;
int j2;
j2=j;
while(j>1&&heap[j/2]>heap[j])
{
int aux;
aux=heap[j/2];
heap[j/2]=heap[j];
heap[j]=aux;
poz[ordin[j/2]]=j;
poz[ordin[j]]=j/2;
aux=ordin[j/2];
ordin[j/2]=ordin[j];
ordin[j]=aux;
j=j/2;
}
j=j2;
}
void remove()
{
int x,u,p,aux;
fin>>x;
u=poz[x];
heap[u]=heap[j];
heap[j]=0;
ordin[u]=ordin[j];
poz[ordin[j]]=u;
j--;
while(heap[2*u]&&(heap[2*u]<heap[u]||(heap[2*u+1]&&heap[2*u+1]<heap[u])))
{
if(heap[2*u+1]&&heap[2*u+1]<heap[2*u])p=2*u+1;
else p=2*u;
aux=heap[p];
heap[p]=heap[u];
heap[u]=aux;
poz[ordin[p]]=u;
poz[ordin[u]]=p;
aux=ordin[p];
ordin[p]=ordin[u];
ordin[u]=aux;
u=p;
}
}
void afish()
{
fout<<heap[1]<<"\n";
}
int main()
{
int n,i,x;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>x;
if(x==1)add();
if(x==2)remove();
if(x==3)afish();
}
return 0;
}