Pagini recente » Cod sursa (job #2287524) | Borderou de evaluare (job #1036693) | Cod sursa (job #3191858) | Cod sursa (job #8069) | Cod sursa (job #1994650)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int v[200001], X[200001], poz2[200001],i,n,cod,y,n2,k;
void interschimbare(int a, int b)
{
int aux;
aux=v[a];
v[a]=v[b];
v[b]=aux;
poz2[v[a]]=a;
poz2[v[b]]=b;
}
void Urcare(int poz)
{
if(poz==1 || X[v[poz/2]]<=X[v[poz]])
return;
interschimbare(poz/2,poz);
Urcare(poz/2);
}
void CoborareStergere(int poz)
{
int st=poz*2,dr=poz*2+1,maxim=poz;
if(st<=n2 and X[v[st]]<X[v[maxim]])
maxim=st;
if(dr<=n2 and X[v[dr]]<X[v[maxim]])
maxim=dr;
if(maxim!=poz)
{
interschimbare(poz,maxim);
CoborareStergere(maxim);
}
}
int main()
{
fin >> n;
n2=0;
k=0;
for(i=1;i<=n;i++)
{
fin >> cod;
if(cod==1)
{
fin >> X[++k];
v[++n2]=k;
poz2[k]=n2;
Urcare(n2);
}
if(cod==2)
{
fin >> y;
v[poz2[y]]=v[n2];
n2--;
CoborareStergere(poz2[y]);
Urcare(poz2[y]);
}
if(cod==3) fout << X[v[1]]<<"\n";
}
return 0;
}