Pagini recente » Cod sursa (job #2286561) | Cod sursa (job #2624502) | Cod sursa (job #638786) | Cod sursa (job #526891) | Cod sursa (job #276251)
Cod sursa(job #276251)
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 (fiudr(k)<=n) and (h[fiudr(k)]<h[k*2]) then fiu:=k*2+1;
if h[fiu]>=h[k] then fiu:=0;
end;
if fiu<>0 then begin
aux:=poz[fiu];
poz[fiu]:=poz[k];
poz[k]:=aux;
aux:=pozz[fiu];
pozz[fiu]:=pozz[k];
pozz[k]:=aux;
aux:=h[k];
h[k]:=h[fiu];
h[fiu]:=aux;
end;
until fiu=0;
end;
procedure sus(n,k:longint);
var aux:longint;
begin
aux:=h[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[p]:=k;
pozz[k]:=p
end;
procedure sterge(var n:longint; k:longint);
begin
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;
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.