Pagini recente » Cod sursa (job #1776306) | Cod sursa (job #154845) | Cod sursa (job #1520070) | Cod sursa (job #1023629) | Cod sursa (job #587569)
Cod sursa(job #587569)
#include <stdio.h>
#include <fstream.h>
#define N 200001
ifstream fin("heapuri.in");
FILE *g=fopen ("heapuri.out", "w");
int v[N],H[N],P[N],n,m,nr,i,sw,x;
void swap(int &a, int &b)
{
a=a^b;
b=a^b;
a=a^b;
}
void insert (int x) {
while (x>1 && v[H[x]]<v[H[x/2]])
{
swap(H[x], H[x/2]);
P[H[x]]=x;
P[H[x/2]]=x/2;
x/=2;
}
}
void pop (int x) {
int fiu;
do
{
fiu=0;
if (2*x <=m) fiu=2*x;
if (2*x+1<=m && v[H[fiu]]>v[H[2*x+1]]) fiu=2*x+1;
if (v[H[fiu]]>v[H[x]]) fiu=0;
if (fiu)
{
swap (H[fiu], H[x]);
P[H[fiu]]=fiu;
P[H[x]]=x;
x=fiu;
}
}
while (fiu);
}
int main() {
fin>>n;
for (i=1;i<=n;i++)
{
fin>>sw;
if (sw==1)
{
fin>>v[++nr];
H[++m]=nr;
P[nr]=m;
insert(m);
}
if (sw==2)
{
fin>>x;
v[x]=-1;
insert(P[x]);
P[H[1]]=0;
H[1]=H[m--];
pop(1);
}
if (sw==3)
fprintf (g, "%d\n", v[H[1]]);
}
return 0;
}