Pagini recente » Cod sursa (job #699467) | Cod sursa (job #1171023) | Cod sursa (job #528704) | Cod sursa (job #615297) | Cod sursa (job #276281)
Cod sursa(job #276281)
var f,g:text;
i,nr,n,p,x:longint;
op:byte;
h:array[1..200000] of longint;
poz,pozz:array[1..200000] of longint;
function tata(i:longint):longint;
begin
tata:=i div 2;
end;
function fiust(i:longint):longint;
begin
fiust:=i*2;
end;
function fiudr(i:longint):longint;
begin
fiudr:=i*2+1;
end;
procedure jos(n,k:longint);
var fiu,aux:longint;
begin
repeat
fiu:=0;
if k*2<=n then begin
fiu:=k*2;
if (k*2+1<=n) and (h[k*2+1]<h[k*2]) then fiu:=k*2+1;
if h[fiu]>=h[k] then fiu:=0;
end;
if fiu<>0 then begin
poz[pozz[k]]:=fiu;
poz[pozz[fiu]]:=k;
aux:=pozz[k];
pozz[k]:=pozz[fiu];
pozz[fiu]:=aux;
aux:=h[k];
h[k]:=h[fiu];
h[fiu]:=aux;
end;
until fiu=0;
end;
procedure sus(n,k:longint);
var aux,paux:longint;
begin
aux:=h[k];
paux:=pozz[k];
while ((k>1) and (aux<h[k div 2])) do begin
h[k]:=h[k div 2];
poz[pozz[k div 2]]:=k;
pozz[k]:=pozz[k div 2];
k:=k div 2;
end;
h[k]:=aux;
poz[paux]:=k;
pozz[k]:=paux;
end;
procedure sterge(var n:longint; k:longint);
var aux:longint;
begin
aux:=pozz[n];
poz[aux]:=k;
pozz[k]:=aux;
h[k]:=h[n];
n:=n-1;
if ((k>1) and (h[k]<h[k div 2])) then
sus(n,k) else jos(n,k);
end;
BEGIN
assign(f,'heapuri.in');
reset(f);
assign(g,'heapuri.out');
rewrite(g);
readln(f,nr);
for i:=1 to nr do begin
read(f,op);
if op=1 then begin
n:=n+1;
read(f,h[n]);
p:=p+1;
poz[p]:=n;
pozz[n]:=p;
sus(n,n);
end else
if op=2 then begin
read(f,x);
sterge(n,poz[x]);
end else begin
writeln(g,h[1]);
end;
end;
close(g);
END.