рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо
рдмрд╛рдЗрдирд░реА рд╣реАрдк рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ Sift-Down (рдпрд╛ Heapify) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХрдИ рд▓реЛрдЧ рд╢рд╛рдпрдж рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдвреЗрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

ред рдпрд╣рд╛рдБ рдореИрдВ рдЗрд╕ рддрдереНрдп рдХрд╛ рдкреНрд░рдорд╛рдг рджреЗрддрд╛ рд╣реВрдБред
рдкрд╛рд╕реНрдХрд▓ рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдкрд░ рдвреЗрд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
procedure siftdown(v:longint); var min,l,r:longint; begin l:=v*2; r:=v*2+1; min:=v; if (l <= s) and (a[l] < a[min]) then min:=l; if (r <= s) and (a[r] < a[min]) then min:=r; if min <> v then begin swap(a[min], a[v]); sift_down(min); end; end; procedure build; var i:longint; begin for i:=n downto 1 do siftdown(i); end;
рддреЛ, рдЪрд▓реЛ рдПрдХ рд╕рд░рдгреА рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ

рддрддреНрд╡реЛрдВ, рдФрд░

рдСрдкрд░реЗрдЯрд░ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛

(рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ

) рдЗрд╕ рд╕рд░рдгреА рдкрд░ рдПрдХ рдвреЗрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордпред рдЬрд╛рд╣рд┐рд░ рд╣реИ,

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд░рд┐рдЪрд╛рд▓рди рд╕рдордп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ

рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рд▓реЗрдореНрдорд╛ред
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рд░рдгреА рдХреЗ рдХреБрдЫ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ

рд╣реЛ рдЧрдпрд╛ рдерд╛

рдСрдкрд░реЗрдЯрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ

ред рддрдм рдЗрд╕рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдерд╛

ред
рд╕рдмреВрдд:
рдкрд░

рдСрдкрд░реЗрдЯрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ

рд╕реВрдЪреА

рддрддреНрд╡ рдХрдо рд╕реЗ рдХрдо рдмрдврд╝рддрд╛ рд╣реИ

рд╕рдордпред рдЕрдм рдЪрд▓реЛ

, рдпрд╛рдиреАред

ред рдлрд┐рд░ рдЙрд╕рдХреЗ рдмрд╛рдж

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЙрд▓ рд╣реИрдВ

рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдвреЗрд░ рдореЗрдВ

рддрддреНрд╡реЛрдВред

рдЖрдЗрдП рдЕрдм рдорд╛рддреНрд░рд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ

ред рдПрдХ рд╕рд░рдгреА рддрддреНрд╡ рдХрд╛ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИ

ред рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛

рдРрд╕рд╛ рд╣реИ

ред рдлрд┐рд░, рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рддрддреНрд╡ рдХреЗ рдХреНрд░рдо рдореЗрдВ

рдвреЗрд░ рдкрд░ рдЬрдЧрд╣ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛ рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

рдХреЙрд▓

(рд▓реЗрдореНрдорд╛ рджреНрд╡рд╛рд░рд╛)ред рдРрд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдореВрд▓реНрдп рд╣реИ

рдЬрд┐рд╕ рдкрд░

рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдЗрд╕ рддрд░рд╣ рд╕реЗ

рдкрд░

рд╢рдмреНрдж рд╢реВрдиреНрдп рд╣реИрдВ (рдЗрд╕рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЪрдХреНрд░

рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

)ред
рд╣рдо рдпреЛрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдореЗрдВ рдмрд╛рдПрдВ рдХрд╛рд░рдХ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ

рдпрд╣рд╛рдБ рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕:

рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рд╢рд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВрдЧреЗред


рдЗрд╕ рддрд░рд╣ рд╕реЗ

ред

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рдмрд╛рдВрдзрд╛ рдЧрдпрд╛ рд╣реИ

ред рдЗрд╕рд▓рд┐рдП,

ред
рдЗрд╕рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд░рд┐рдЪрд╛рд▓рди рд╕рдордп

рдПрдХ рдЕрдиреБрдкрд╛рдд рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реИ

ред