Pagini recente » Cod sursa (job #2564234) | Cod sursa (job #2873731) | Cod sursa (job #2762868) | Cod sursa (job #577725) | Cod sursa (job #484431)
Cod sursa(job #484431)
var H,z,q:array[1..200000]of longint;
buf:array[1..1 shl 17]of char;
m,n,i,x,c:longint;
op:byte;
procedure interschimba(a,b:longint);
var x:longint;
begin
x:=H[a]; H[a]:=H[b]; H[b]:=x;
q[z[a]]:=b;
q[z[b]]:=a;
x:=z[a]; z[a]:=z[b]; z[b]:=x;
end;
procedure get_up(k:longint);
var p:longint;
begin
p:=k shr 1;
while (p>0)and(H[p]>H[k]) do begin
interschimba(p,k);
k:=p;
p:=k shr 1;
end;
end;
procedure get_down(k:longint);
var s1,s2:longint;
begin
while k<=n do begin
s1:=k shl 1;
s2:=s1+1;
if s2<=n then begin
if (H[s1]<=H[s2])and(H[s1]<H[k]) then begin
interschimba(s1,k);
k:=s1;
end
else if H[s2]<H[k] then begin
interschimba(s2,k);
k:=s2;
end;
end
else begin
if (s1<=n)and(H[s1]<H[k]) then interschimba(s1,k);
k:=s2;
end;
end;
end;
procedure baga(x:longint);
begin
n:=n+1;
inc(c);
H[n]:=x;
z[n]:=c;
q[c]:=n;
get_up(n);
end;
procedure scoate(x:longint);
var poz:longint;
begin
poz:=q[x];
interschimba(n,poz);
z[n]:=0;
q[x]:=0;
H[n]:=0;
dec(n);
get_up(poz);
get_down(poz);
end;
begin
assign(input,'heapuri.in');
reset(input);
settextbuf(input,buf);
assign(output,'heapuri.out');
rewrite(output);
read(m);
n:=0;
c:=0;
for i:=1 to m do begin
read(op);
if op=3 then writeln(H[1])
else begin
read(x);
if op=1 then baga(x);
if op=2 then scoate(x);
end;
end;
close(output);
end.