Pagini recente » Cod sursa (job #1163901) | Cod sursa (job #2505114) | Cod sursa (job #1750016) | Cod sursa (job #505100) | Cod sursa (job #2505120)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("heapuri.in");
ofstream out ("heapuri.out");
int n,l,nr;
int A[200010],Heap[200010],Pos[200010];
void push(int x)
{
while(x/2 && A[Heap[x]]<A[Heap[x/2]])
{
swap(Heap[x],Heap[x/2]);
swap(Pos[Heap[x]],Pos[Heap[x/2]]);
x/=2;
}
}
void pop()
{
int y=0,x=1;
while(x!=y)
{
y=x;
if(y*2<=l && A[Heap[x]]>A[Heap[y*2]])
x=y*2;
if(y*2+1<=l && A[Heap[x]]>A[Heap[y*2+1]])
x=y*2+1;
swap(Heap[x],Heap[y]);
swap(Pos[Heap[x]],Pos[Heap[y]]);
}
}
int main()
{
int i,x,cod;
in>>n;
for(i=1; i<=n; i++)
{
in>>cod;
if(cod==1)
{
in>>x;
l++;
nr++;
A[nr]=x;
Heap[l]=nr;
Pos[nr]=l;
push(l);
}
if(cod==2)
{
in>>x;
A[x]=-1;
push(Pos[x]);
Pos[Heap[1]]=0;
Heap[1]=Heap[l--];
Pos[Heap[1]]=1;
if(l>1)
pop();
}
if(cod==3)
out<<A[Heap[1]]<<'\n';
}
return 0;
}