Pagini recente » Cod sursa (job #31661) | Cod sursa (job #400925) | Cod sursa (job #399691) | Cod sursa (job #400404) | Cod sursa (job #303303)
Cod sursa(job #303303)
var m,lh,aux,n,x,i:longint;
poz,h,ind:array[1..200000] of longint;
procedure sus(k,m:longint);
var key:longint;
begin
key:=h[k];
while(k>1)and(key<h[k div 2]) do
begin
h[k]:=h[k div 2];
i:=ind[k div 2];
poz[i]:=k; ind[k]:=i;
k:=k div 2;
end;
if key<>h[k] then begin h[k]:=key; ind[k]:=m; poz[m]:=k;end;
end;
procedure jos(i:longint);
var s,d,min,ii,im:longint;
begin
s:=2*i; d:=2*i+1; min:=i;
if (s<=lh)and(h[s]<h[min]) then min:=s;
if (d<=lh)and(h[d]<h[min]) then min:=d;
if min<>i then
begin
ii:=ind[i]; im:=ind[min];
aux:=h[i]; h[i]:=h[min]; h[min]:=aux;
poz[ii]:=min; poz[im]:=i;
ind[i]:=im; ind[min]:=ii;
jos(min);
end;
end;
begin
assign(input,'heapuri.in'); reset(input);
assign(output,'heapuri.out'); rewrite(output);
readln(n);
lh:=0; m:=0;
while (n>=1) do
begin
read(x);
if x=3 then begin writeln(h[1]); readln; end
else if x=1 then
begin
readln(x);
inc(lh); h[lh]:=x;
inc(m); poz[m]:=lh;
ind[lh]:=m;
sus(lh,m);
end
else
begin
readln(x);
h[poz[x]]:=h[lh];
i:=ind[lh]; poz[i]:=poz[x]; ind[poz[x]]:=i;
dec(lh);
sus(poz[x], ind[poz[x]]);
jos(poz[x]);
end;
dec(n);
end;
close(input); close(output);
end.