Pagini recente » Cod sursa (job #304484) | Cod sursa (job #2149447) | Cod sursa (job #713289) | Cod sursa (job #481187) | Cod sursa (job #946593)
Cod sursa(job #946593)
program heapuri;
var a:array[1..200000]of longint;
order,poz:array[1..200000]of longint;
n,i,k,x,heapsize:longint;
bufin,bufout:array[1..100000] of byte;
op:byte;
procedure heapify(i:longint);
var min,x:longint;
begin
min:=i;
if (2*i<=heapsize)and(a[2*i]<a[min])then min:=2*i;
if (2*i+1<=heapsize)and(a[2*i+1]<a[min]) then min:=2*i+1;
if min<>i then
begin
x:=a[i];
a[i]:=a[min];
a[min]:=x;
x:=order[i];
order[i]:=order[min];
order[min]:=x;
poz[order[i]]:=i;
poz[order[min]]:=min;
heapify(min);
end;
end;
procedure insert(x:longint);
var i:longint;
begin
inc(heapsize);
a[heapsize]:=x;
i:=heapsize;
order[i]:=k;
poz[order[i]]:=i;
while (i<>1)and(a[i div 2]>a[i]) do
begin
x:=a[i div 2];
a[i div 2]:=a[i];
a[i]:=x;
x:=order[i div 2];
order[i div 2]:=order[i];
order[i]:=x;
poz[order[i]]:=i;
poz[order[i div 2]]:=i div 2;
i:=i div 2;
end;
end;
function min:longint;
begin
min:=a[1];
end;
procedure delete(i:longint);
begin
a[i]:=a[heapsize];
order[i]:=order[heapsize];
poz[order[i]]:=i;
dec(heapsize);
heapify(i);
end;
begin
assign(input,'heapuri.in');
reset(input);
settextbuf(input,bufin);
assign(output,'heapuri.out');
rewrite(output);
settextbuf(output,bufout);
readln(n);
for i:=1 to n do
begin
read(op);
case op of
1: begin readln(x);inc(k);insert(x);end;
2: begin readln(x);delete(poz[x]);end;
3: writeln(min);
end;
end;
close(input);close(output);
end.