Pagini recente » Cod sursa (job #2186428) | Cod sursa (job #2044902) | Cod sursa (job #486324) | Cod sursa (job #723620) | Cod sursa (job #408583)
Cod sursa(job #408583)
const tfi='heapuri.in';
tfo='heapuri.out';
maxn=200200;
var fi,fo:text;
nh,cnt,i,n,x,u,v:longint;
vt,h,a:array[0..maxn] of longint;
procedure swap(var u,v:longint);
var tg:longint;
begin
tg:=u; u:=v; v:=tg;
end;
procedure push(u:longint);
var cha,con:longint;
begin
inc(nh);
h[nh]:=u;
vt[u]:=nh;
con:=nh; cha:=con div 2;
while (cha>0) and (a[h[cha]]>a[h[con]]) do
begin
swap(h[cha],h[con]);
vt[h[cha]]:=cha;
vt[h[con]]:=con;
con:=cha;
cha:=con div 2;
end;
end;
procedure process1;
var i,j:longint;
u,v:longint;
begin
inc(cnt);
read(fi,a[cnt]);
push(cnt);
end;
procedure process3;
begin
writeln(fo,a[h[1]]);
end;
procedure down(u:longint);
var v,cha,con:Longint;
begin
v:=vt[u];
h[v]:=h[nh];
vt[h[v]]:=v;
dec(nh);
cha:=v; con:=cha*2;
while con<=nh do
begin
if con<nh then
if a[h[con]]>a[h[con+1]] then inc(con);
if a[h[con]]>=a[h[cha]] then exit;
swap(h[con],h[cha]);
vt[h[con]]:=con;
vt[h[cha]]:=cha;
cha:=con;
con:=cha*2;
end;
end;
procedure up(u:longint);
var cha,con:longint;
begin
con:=nh; cha:=con div 2;
while (cha>0) and (a[h[cha]]>a[h[con]]) do
begin
swap(h[cha],h[con]);
vt[h[cha]]:=cha;
vt[h[con]]:=con;
con:=cha;
cha:=con div 2;
end;
end;
procedure process2;
var i,j:longint;
u,v:longint;
begin
read(fi,u);
down(u);
up(u);
end;
begin
assign(fi,tfi); reset(fi);
assign(fo,tfo); rewrite(fo);
read(Fi,n);
for i:=1 to n do
begin
read(fi,x);
if x=1 then process1 else
if x=3 then process3
else
process2;
end;
close(Fi); close(Fo);
end.