Pagini recente » Cod sursa (job #1554813) | Cod sursa (job #459539) | Cod sursa (job #1526519) | Cod sursa (job #2272261) | Cod sursa (job #662958)
Cod sursa(job #662958)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,sir[200002],H[200002],pozH[200002],dim,dimH;
void push(int nod)
{
int tata=nod/2;
if(nod==1) return ;
if(sir[H[nod]]>=sir[H[tata]]) return;
swap(H[nod],H[tata]);
swap(pozH[H[nod]],pozH[H[tata]]);
push(pozH[H[tata]]);
}
void pop(int nod)
{
int f1=nod*2;
int f2=nod*2+1;
int nodmin=nod;
if(sir[H[f1]]<sir[H[nodmin]] && f1<=dimH)
nodmin=f1;
if(sir[H[f2]]<sir[H[nodmin]] && f2<=dimH)
nodmin=f2;
if(nod==nodmin) return;
swap(H[nod],H[nodmin]);
swap(pozH[H[nod]],pozH[H[nodmin]]);
pop(pozH[H[nodmin]]);
}
void adaug()
{
int x;
f>>x;
dim++;
sir[dim]=x;
dimH++;
H[dimH]=dim;
pozH[dim]=dimH;
push(pozH[H[dimH]]);
}
void sterg(int x)
{
swap(H[x],H[dimH]);
swap(pozH[H[x]],pozH[H[dimH]]);
dimH--;
push(pozH[H[x]]);
pop(pozH[H[x]]);
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
{
int a;
f>>a;
if(a==1) adaug();
if(a==2)
{
int x;
f>>x;
sterg(pozH[x]);
}
if(a==3) g<<sir[H[1]]<<"\n";
}
}