Pagini recente » Cod sursa (job #1770075) | Cod sursa (job #2406275) | Cod sursa (job #2512347) | Cod sursa (job #2319084) | Cod sursa (job #484432)
Cod sursa(job #484432)
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 s:longint;
begin
if k shl 1 <= n then begin
s:=k shl 1;
if (s<n)and(H[s]<H[s+1]) then inc(s);
if H[s]>=H[k] then s:=0;
end
else s:=0;
while s>0 do begin
interschimba(k,s);
k:=s;
if k shl 1 < n then begin
s:=k shl 1;
if (s<n)and(H[s]<H[s+1]) then inc(s);
if H[s]>=H[k] then s:=0;
end
else s:=0;
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.