PROCEDURE ADDHEAP(HEAD,TAIL:INTEGER); VAR MIN,W:INTEGER; BEGIN IF 2*HEAD>TAIL THEN MIN:=-1 ELSE IF 2*HEAD=TAIL THEN MIN:=TAIL ELSE IF H[2*HEAD]>H[2*HEAD+1] THEN MIN:=2*HEAD+1 ELSE MIN:=2*HEAD; IF (MIN>0) AND (H[HEAD]>H[MIN]) THEN BEGIN W:=H[HEAD]; H[HEAD]:=H[MIN]; H[MIN]:=W; ADDHEAP(MIN,TAIL) END END; PROCEDURE HEAP(HEAD,TAIL:INTEGER;H:HH); VAR X:INTEGER; BEGIN X:=(TAIL DIV 2)+1; WHILE X>HEAD DO BEGIN X:=X-1; ADDHEAP(X,TAIL) END END; PROCEDURE INIT; VAR I:INTEGER; BEGIN FOR I:=1 TO N DO H[I]:=0 END;