Pagini recente » Cod sursa (job #1691332) | Cod sursa (job #751308) | Cod sursa (job #1141475) | Cod sursa (job #3265461) | Cod sursa (job #494760)
Cod sursa(job #494760)
program heapuri;
const maxn=200001;
type elem=0..maxn;
var f,g:text; v:array[elem] of longint; pos,H:array[elem] of elem;
x:byte; y,i:longint; n,m,hp:elem;
procedure upheap(k:elem);
var key:longint;
begin
key:=H[k];
While (k>1)and(v[key]<v[H[k div 2]]) do
begin
pos[H[k div 2]]:=pos[H[k]];
H[k]:=H[k div 2];
k:=k div 2;
H[k]:=key;
pos[H[k]]:=k;
end;
end;
procedure swap(var a:elem; var b:elem);
var aux:longint;
begin
aux:=a;
a:=b;
b:=aux;
end;
procedure downheap(k:elem);
var son:elem;
begin
Repeat
son:=0;
If 2*k<=hp then
begin
son:=2*k;
If (2*k+1<=hp)and(v[H[son]]>v[H[2*k+1]]) then son:=2*k+1;
If v[H[son]]>v[H[k]] then son:=0;
end;
If son>0 then
begin
swap(pos[H[son]],pos[H[k]]);
swap(H[son],H[k]);
k:=son;
end;
Until son=0;
end;
procedure delete(k:elem); {k= pozitia in heap}
begin
pos[H[hp]]:=k;
H[k]:=H[hp];
k:=pos[H[k]];
dec(hp);
If (k>1)and(v[H[k]]<v[H[k div 2]]) then upheap(k)
else downheap(k);
end;
procedure insert(y:longint);
begin
inc(n); inc(hp);
H[hp]:=n; {H= pozitia elementului din heap in vector}
pos[n]:=hp; {pos= pozitia elementului din vector in heap}
v[n]:=y;
upheap(hp);
end;
begin
Assign(f,'heapuri.in'); Reset(f);
Assign(g,'heapuri.out');Rewrite(g);
Readln(f,m);
For i:=1 to m do
begin
Read(f,x);
If x<3 then Readln(f,y)
else Readln(f);
case x of
1: insert(y);
2: delete(pos[y]);
3: Writeln(g,v[H[1]]);
end;
end;
Close(f); Close(g);
end.