Pagini recente » Cod sursa (job #1149135) | Cod sursa (job #2967111) | Cod sursa (job #932143) | Cod sursa (job #2255624)
#include <bits/stdc++.h>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
const int N = 200010;
int n,c,x,L,t,h[N],p[N],v[N];
void heapUp(int),heapDown(int),swapHeap(int,int);
int main()
{
f>> n;
for(; n; n--)
{
f>>c;
if(c==3)
{
g<<v[h[1]]<<'\n';
continue;
}
f>>x;
if(c==1)
{
v[++t]=x;
p[t]=++L;
h[L]=t;
heapUp(L);
continue;
}
x=p[x];
swapHeap(x,L);
L--;
heapUp(x);
heapDown(x);
}
return 0;
}
void swapHeap(int i,int j)
{
swap(h[i],h[j]);
p[h[i]]=i;
p[h[j]]=j;
}
void heapUp(int fiu)
{
int tata=fiu/2;
if(tata)
if(v[h[fiu]]<v[h[tata]])
{
swapHeap(fiu,tata);
heapUp(tata);
}
}
void heapDown(int tata)
{
int fiu=2*tata;
if(fiu>L)
return;
if(fiu<L&&(v[h[fiu+1]]<v[h[fiu]]))fiu++;
if(v[h[fiu]]<v[h[tata]])
{
swapHeap(tata,fiu);
heapDown(fiu);
}
}