Pagini recente » Cod sursa (job #1961694) | Cod sursa (job #2180956) | Cod sursa (job #437549) | Cod sursa (job #2083764) | Cod sursa (job #1307112)
program heapuri;
type
tabel=array[0..200001] of longint;
var
heap,v,poz:tabel;
n,i,j,k,tip,x,kk:longint;
f1,f2:text;
function swap(var a,b:longint):longint;
var aux:longint;
begin aux:=a; a:=b; b:=aux; end;
procedure insertheap(x:longint);
var c,p:longint;
begin
k:=k+1;
heap[k]:=x;
poz[x]:=k;
c:=k;
p:=k div 2;
while p>0 do begin
if v[heap[p]]>v[heap[c]] then begin
swap(heap[p],heap[c]);
swap(poz[heap[c]],poz[heap[p]]);
c:=p;
p:=p div 2;
end else break;
end; end;
procedure sterge_rad;
var p,c:longint;
begin
heap[1]:=heap[k];
poz[heap[k]]:=1;
k:=k-1;
p:=1; c:=2;
while c<=k do begin
if (c+1<=k) and (v[heap[c+1]]<v[heap[c]]) then c:=c+1;
if v[heap[p]]>v[heap[c]] then begin
swap(heap[c],heap[p]);
swap(poz[heap[c]],poz[heap[p]]);
p:=c;
c:=c*2;
end else break;
end; end;
procedure sterge(x:longint);
var c,p:longint;
begin
v[x]:=-1;
c:=poz[x];
p:=c div 2;
while p>0 do begin
if v[heap[p]]>v[heap[c]] then begin
swap(heap[c],heap[p]);
swap(poz[heap[c]],poz[heap[p]]);
c:=p;
p:=p div 2;
end else break;
end;
sterge_rad;
end;
begin
assign (f1,'heapuri.in');
assign (f2,'heapuri.out');
reset (f1);
rewrite (f2);
readln (f1,n);
k:=0; kk:=0;
for i:=1 to n do begin
read (f1,tip);
case tip of
1:begin read(f1,x); kk:=kk+1; v[kk]:=x; insertheap(kk); end;
2:begin read (f1,x); sterge(x); end;
3:writeln (f2,v[heap[1]]);
end;
readln (f1);
end;
close (f1);
close (f2);
end.