Pagini recente » Cod sursa (job #2818540) | Cod sursa (job #1628231) | Cod sursa (job #1030951) | Cod sursa (job #402481) | Cod sursa (job #355604)
Cod sursa(job #355604)
var v,p,r:array[1..200005] of longint;
m,i,cod,n,x,aux,a:longint;
f,g:text;
procedure perc(poz:longint);
begin
while (poz<>1) and (v[poz]<v[poz shr 1]) do
begin
aux:=v[poz];
v[poz]:=v[poz shr 1];
v[poz shr 1]:=aux;
aux:=r[poz];
r[poz]:=r[poz shr 1];
r[poz shr 1]:=aux;
p[r[poz]]:=poz;
p[r[poz shr 1]]:=poz shr 1;
poz:=poz shr 1;
end;
end;
procedure sift(poz:longint);
begin
while (poz<=n div 2) and ((v[poz]>v[poz*2]) or (v[poz]>v[poz*2+1])) do
if (v[poz*2]<v[poz*2+1]) and (poz*2<=n) then
begin
aux:=v[poz];
v[poz]:=v[poz*2];
v[poz*2]:=aux;
aux:=r[poz];
r[poz]:=r[poz*2];
r[poz*2]:=aux;
p[r[poz]]:=poz;
p[r[poz*2]]:=poz*2;
poz:=poz*2;
end
else
if (v[poz*2+1]<=v[poz*2]) and (poz*2+1<=n) then
begin
aux:=v[poz];
v[poz]:=v[poz*2+1];
v[poz*2+1]:=aux;
aux:=r[poz];
r[poz]:=r[poz*2+1];
r[poz*2+1]:=aux;
p[r[poz]]:=poz;
p[r[poz*2+1]]:=poz*2+1;
poz:=poz*2+1;
end;
end;
begin
assign(f,'heapuri.in');
assign(g,'heapuri.out');
reset(f);rewrite(g);
readln(f,m);
for i:=1 to m do
begin
read(f,cod);
case cod of
1:begin
inc(n);
inc(a);
readln(f,v[n]);
p[a]:=n;
r[n]:=a;
perc(n);
end;
2:begin
readln(f,x);
v[p[x]]:=v[n];
r[p[x]]:=r[n];
p[r[n]]:=p[x];
dec(n);
if v[p[x]]<v[p[x] div 2] then
perc(p[x])
else
sift(p[x]);
end;
3:begin
writeln(g,v[1]);
readln(f);
end;
end;
end;
close(f);close(g);
end.