Pagini recente » Cod sursa (job #986178) | Cod sursa (job #2985659) | Cod sursa (job #1074687) | Cod sursa (job #3143781) | Cod sursa (job #599505)
Cod sursa(job #599505)
const fin = 'heapuri.in'; fout = 'heapuri.out';
type
heap = array[1..200 * 1000] of longword;
var
h ,pos ,a : heap;
procedure swap(var a ,b : longword);
var
c : longword;
begin
c := a; a := b; b := c;
end;
procedure insert(var n : longword; x : longword; var r : longword);
var
t, f : longword;
begin
r := r + 1;
n := n + 1;
h[n] := x;
a[r] := n;
pos[n] := n;
f := n;
t := f div 2;
while (t > 0) and (h[t] > h[f]) do
begin
swap( h[t], h[f] );
swap( a[t], a[f] );
pos[t] := f;
pos[n] := t;
f := t;
t := f div 2;
end;
end;
procedure delete(var n : longword; x : longword);
var
t ,f : longword;
begin
h[pos[x]] := h[n];
pos[a[n]] := pos[x];
n := n - 1;
t := pos[x];
f := 2 * t;
if (f + 1 <= n) and (h[f + 1] < h[f]) then f := f + 1;
while (f <= n) and (h[f] < h[t]) do
begin
swap( h[t] , h[f] );
swap( a[t] , a[f] );
pos[f] := t;
pos[x] := f;
t := f;
f := 2 * t;
if (f + 1 <= n) and (h[f + 1] < h[f]) then f := f + 1;
end;
end;
procedure main();
var
n ,m ,i ,x ,r : longword;
cod : byte;
begin
assign( input, fin ); reset( input );
assign( output, fout ); rewrite( output );
readln( m );
n := 0; r := 0;
for i := 1 to m do
begin
read( cod );
if (cod = 3) then write( h[1], #10 ) else
begin
read( x );
if (cod = 1) then insert( n , x , r ) else
if (cod = 2) then delete( n , x );
end;
end;
end;
begin
main();
end.