рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдЯреНрд░реА: рдкрд╛рд░реНрдЯ 2. рдЯреНрд░реА рдореЗрдВ рдореВрд▓реНрдпрд╡рд╛рди рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрдИ рдСрдкрд░реЗрд╢рди

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ)


рднрд╛рдЧ 1. рд╡рд┐рд╡рд░рдг, рд╕рдВрдЪрд╛рд▓рди, рдЕрдиреБрдкреНрд░рдпреЛрдЧред
рднрд╛рдЧ 2. рдкреЗрдбрд╝ рдореЗрдВ рдореВрд▓реНрдпрд╡рд╛рди рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрдИ рдСрдкрд░реЗрд╢рдиред
рднрд╛рдЧ 3. рдирд┐рд╣рд┐рдд рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдкреЗрдбрд╝ред
рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ...

рдЖрдЬ рдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХрд╛ рд╡рд┐рд╖рдп


рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рд╣рдо рдорд┐рд▓реЗ рдереЗ - рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рдореЛрдЯреЗ рддреМрд░ рдкрд░ - рдПрдХ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдкреЗрдбрд╝ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдФрд░ рдЗрд╕рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЧрдпрд╛ред рдХреЗрд╡рд▓ рдЕрдм рддрдХ рд╣рдордиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдЕрдиреЛрдЦреЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ: рдПрдХ "рдЕрд░реНрдз-рд╕рдВрддреБрд▓рд┐рдд" рдЦреЛрдЬ рд╡реГрдХреНрд╖ рдХреЗ рд░реВрдк рдореЗрдВред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреА рдЬрд╛рдП, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдПрдХ рдкреЗрдбрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдХреЛ рд▓рдШреБрдЧрдгрдХреАрдп рд╕рдордп рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдФрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ (рдпрд╛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ?), рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдРрд╕реЗ trifling рдХрд╛рд░реНрдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдЬ рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рд╣реЛрдЧреАред рдПрдЬреЗрдВрдбрд╛ рдкрд░ рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рддрдерд╛рдХрдерд┐рдд рдХреЗ-рде рдСрд░реНрдбрд┐рдирд▓ рдЖрдБрдХрдбрд╝реЗ рд╣реИ, рдпрд╛ рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдореЗрдВ рдХреЛрдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЕрдирдЧрд┐рдирдд рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВред

рд╣рдо рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ


рдЧрдгрд┐рдд рдореЗрдВ, рдХреЗрде рдСрд░реНрдбрд┐рдирд▓ рд╕реНрдЯреЗрдЯрд┐рд╕реНрдЯрд┐рдХ рдПрдХ рд░реИрдВрдбрдо рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИ, рдЬреЛ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рд╕реНрдкреЗрд╕ рд╕реЗ рд░реИрдВрдбрдо рд╕реИрдВрдкрд▓ рдХреЗ Kth рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдПрд▓рд┐рдореЗрдВрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдмрд╣реБрдд рд╣реЛрд╢рд┐рдпрд╛рд░ред рдЖрдЗрдП рдкреЗрдбрд╝ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ: рд╣рд░ рд╕рдордп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдкреЗрдбрд╝ рд╣реИ, рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдЗрд╕ рдкреЗрдбрд╝ рдХреА Kth рдХреБрдВрдЬреА рдмрд╣реБрдд рдЬрд▓реНрджреА рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдкреЗрдбрд╝ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдмрдирд╛рдП рдЧрдП рдХреНрд░рдордмрджреНрдз рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рд╕реВрдЪрдХрд╛рдВрдХ K рдХреЗ рддрд╣рдд рддрддреНрд╡ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП: рд╣рдорд╛рд░реЗ рдкреЗрдбрд╝ рдПрди рдореЗрдВ рдЪрд╛рдмрд┐рдпрд╛рдБ, рдФрд░ рд╡реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВред рд╣рдо рдЦреЛрдЬ рдкреЗрдбрд╝ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ - рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдХреБрдВрдЬреА рдЗрд╕рдХреЗ рдмрд╛рдПрдВ рд╕рдмрдЯреНрд░реА рдХреА рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рд╕реЗ рдмрдбрд╝реА рд╣реИ, рдФрд░ рд╕рд╣реА рд╕рдмрдЯреНрд░реА рдХреА рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рд╕реЗ рдХрдо рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреНрд░рдордмрджреНрдз рдХреНрд░рдо рдореЗрдВ рдкреЗрдбрд╝ рдХреА рдЪрд╛рдмрд┐рдпреЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдкрд░ рддрдерд╛рдХрдерд┐рдд рдЗрди-рдСрд░реНрдбрд░ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдУ, "рдкрд╣рд▓реЗ рдмрд╛рдПрдВ рдЙрдк-рдХреНрд░рдорд┐рдХ рдмрд╛рдпрдкрд╛рд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реБрдП, рдлрд┐рд░ рд░реВрдЯ рдХреА рдХреБрдВрдЬреА, рдФрд░ рдлрд┐рд░ рд╕рд╣реА рдЙрдкрд╢реАрд░реНрд╖рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐"ред рдпрджрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рдордирд╛ рдХреА рдЧрдИ рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдПрдХ рд╕реВрдЪреА рдореЗрдВ рджрд░реНрдЬ рдХреА рдЧрдИ рд╣реИ, рддреЛ рдЕрдВрдд рдореЗрдВ рд╣рдо рдкреЗрдбрд╝ рдХреЗ рд╕рднреА рдХреЛрдиреЗ рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдЬреЛ рдХреЛрдИ рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЖрдВрдХрдбрд╝рд╛ рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЖрдВрдХрдбрд╝реЗ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╡рд╣ рдЙрд╕реА рдЖрдХреГрддрд┐ рд╕реЗ рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред
рдЙрдкрд░реНрдпреБрдХреНрдд рддрд░реНрдХ рд╣рдореЗрдВ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдирдХ рд╕рд╛рдзрдиреЛрдВ ( foreach , рдЖрджрд┐) рдХреЗ рджреНрд╡рд╛рд░рд╛, рд╣рдо рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВрдЧреЗред C # рдореЗрдВ, рдЖрдк рдмрд╕ рдПрдХ рдЗрди-рдСрд░реНрдбрд░ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ yield return рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ yield return , рдФрд░ рдЙрди рдореЗрдВ рдЬрд╣рд╛рдВ рдРрд╕реА рдХреЛрдИ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдкрд░ рдкреЗрдбрд╝ рдореЗрдВ "рдЕрдЧрд▓реЗ" рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ, рдЬреЛ рдореВрд▓реНрдпрд╡рд╛рди рд╕реНрдореГрддрд┐ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЦрд░реНрдЪ рджреЗрддрд╛ рд╣реИред рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЧреИрд░-рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреЗрдбрд╝ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рд▓рд┐рдЦрдирд╛, рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЧрддрд┐ рдФрд░ рд╕реНрдореГрддрд┐ рд▓рд╛рдЧрдд рджреЛрдиреЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ред

рдмреЗрд╢рдХ, рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдУ (рдПрди) рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдореЗрдВ рддреБрд░рдВрдд рдкрддрд╛ рдЪрд▓ рдЬрд╛рдП рдХрд┐ рдкреЗрдбрд╝ рдХреЗ рдХрд┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдЬрд╛рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрдбрд╝реЗ рдпрд╛ рдЫреЛрдЯреЗ рддрддреНрд╡реЛрдВ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдкреЗрдбрд╝ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░рд╡реЗрд╢ рдХреЗ рджреМрд░рд╛рди рд╣рдореЗрдВ рдХрд┐рддрдиреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдкрд░ рдЗрд╕рдХреЗ рдЙрдк рдЖрдХрд╛рд░ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдХрд░реЗрдВрдЧреЗред

рдЖрдВрдХрдбрд╝рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдкрд░ рдЪрд┐рдкрдХрд╛рдП рдЧрдП рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкреЗрдбрд╝ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдлрд┐рд░ рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрд╢реАрд░реНрд╖рдХ рдореЗрдВ рдХреЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХреАред рдЕрдм рд╣рдо рд╢реВрдиреНрдп (!) рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреНрд░рдордг рдореЗрдВ Kth рддрддреНрд╡ рдХреЛ рдЦреЛрдЬрддреЗ рд╣реИрдВред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╣рдо рдкреЗрдбрд╝ рдХреА рдЬрдбрд╝ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдПрдВ рд╕рдмрдЯреНрд░реА рдПрд╕ рдПрд▓ рдХреЗ рдЖрдХрд╛рд░ рдкрд░, рджрд╛рдИрдВ рдУрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдПрд╕ рдПрд▓ = рдХреЗ, рддреЛ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡ рдорд┐рд▓рд╛, рдФрд░ рдпрд╣ рдЬрдбрд╝ рд╣реИред
рдпрджрд┐ рдПрд╕ рдПрд▓ > рдХреЗ, рддреЛ рд╡рд╛рдВрдЫрд┐рдд рддрддреНрд╡ рдХрд╣реАрдВ рдмрд╛рдПрдВ рд╕рдмрдЯреНрд░реА рдореЗрдВ рд╣реИ, рд╡рд╣рд╛рдВ рдиреАрдЪреЗ рдЬрд╛рдПрдВ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред
рдпрджрд┐ рдПрд╕ рдПрд▓ <рдХреЗ, рддреЛ рд╡рд╛рдВрдЫрд┐рдд рддрддреНрд╡ рдХрд╣реАрдВ рд╕рд╣реА рдЙрдкрдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╣реИред рд╕рд╣реА рдкрд░ рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЖрдХрд╛рд░реЛрдВ рдХрд╛ рд╕рд╣реА рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╕рд╣реА рдЙрдкрдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП S S L +1 рджреНрд╡рд╛рд░рд╛ K рдХреЛ рдХрдо рдХрд░реЗрдВред

рдореИрдВ рдЗрд╕ рдЦреЛрдЬ рдХреЛ рдЙрд╕реА рдкреЗрдбрд╝ рдкрд░ K = 6 рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдХрд░реВрдВрдЧрд╛:
рд╢реАрд░реНрд╖ (10; 8), рдПрд╕ рдПрд▓ = 4, рдХреЗ = 6. рд╣рдо рджрд╛рдИрдВ рдУрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдХрд╢реНрдореАрд░ рдХреЛ 4 + 1 = 5 рд╕реЗ рдХрдо рдХрд░рддреЗ рд╣реИрдВред
рд╢реАрд░реНрд╖ (14; 6), S L = 2, K = 1. рд╣рдо K рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдмрд╛рдПрдВ рдЪрд▓рддреЗ рд╣реИрдВред
рд╢реАрд░реНрд╖ (11; 4), рдПрд╕ рдПрд▓ = 0 (рдХреЛрдИ рдмрд╛рдПрдВ рдмреЗрдЯрд╛ рдирд╣реАрдВ), рдХреЗ = 1. рд╣рдо рджрд╛рдИрдВ рдУрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдХрд╢реНрдореАрд░ рдХреЛ 0 + 1 = 1 рд╕реЗ рдШрдЯрд╛рддреЗ рд╣реИрдВред
рд╢реАрд░реНрд╖ (13; 1), рдПрд╕ рдПрд▓ = 0 (рдХреЛрдИ рдмрд╛рдПрдВ рдмреЗрдЯрд╛ рдирд╣реАрдВ), рдХреЗ = 0. рдХреБрдВрдЬреА рдорд┐рд▓реА рд╣реИред
рдЙрддреНрддрд░: рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рд╡реГрдХреНрд╖ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ 6 рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдХреБрдВрдЬреА 13 рд╣реИред

рдЗрд╕ рдорд╛рд░реНрдЧ рдХреЗ рд╕рднреА, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рдкреЗрдбрд╝ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреБрдВрдЬреА рдЦреЛрдЬ рдХреЗ рд╕рдорд╛рди рд╣реИ - рд╣рдо рдмрд╕ рдкреЗрдбрд╝ рдХреЗ рдиреАрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╡рд╛рдВрдЫрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рдореБрдбрд╝реЗрдВред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣реВрдВрдЧрд╛ - рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдПрдХ рдЬреИрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдорд┐рд▓реЗрдВрдЧреЗ, рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдмрд╛рдЗрдирд░реА рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрддрдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрд╕реНрдерд╛рдпреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реБрдП рдХреБрдЫ рдЪрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рдореЗрдВ, рдЖрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдПрдХ рдмреВрдВрдж рдЦреЛрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рджрд┐рдЦреЗрдЧрд╛ рдФрд░ рдкрдврд╝реЗрдЧрд╛: рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреВрдВрдЫ-рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдФрд░ рд╕рдВрдХрд▓рдХ рддреБрд░рдВрдд рдЙрд╕реА рд╕рд╛рдорд╛рдиреНрдп рд▓реВрдк рдореЗрдВ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИ - рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЛрдб:
data Ord a => Treap a = Null
| Node { key :: a , priority :: Int , size :: Int , left :: (Treap a) , right :: (Treap a) }

sizeOf :: ( Ord a) => Treap a -> Int
sizeOf Null = 0
sizeOf Node {size = s} = s

kthElement :: ( Ord a) => (Treap a) -> Int -> Maybe a
kthElement Null _ = Nothing
kthElement (Node key _ _ left right) k
| sizeLeft == k = Just key
| sizeLeft < k = kthElement left k
| sizeLeft > k = kthElement right (k - sizeLeft - 1)
where sizeLeft = sizeOf left

рдкреНрд░рджрд░реНрд╢рди рдХреА рдмрд╛рдд рдХрд╣реАред Kth рддрддреНрд╡ рдХрд╛ рдЦреЛрдЬ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ O (рд▓реЙрдЧ 2 N) рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдмрд╕ рдкреЗрдбрд╝ рдХреЗ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рдХреА рдУрд░ рдЧрдП рдереЗред

рдкрд╛рдардХреЛрдВ рдХреЛ рдЕрдкрдорд╛рдирд┐рдд рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ C # рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рднреА рд╣рд╡рд╛рд▓рд╛ рджреВрдВрдЧрд╛ред рдЗрд╕рдореЗрдВ, Treap рд╡рд░реНрдЧ рдХреЗ рдорд╛рдирдХ Treap рдореЗрдВ, рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рдлрд╝реАрд▓реНрдб Size рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ - рд╕рдмрдЯреНрд░реА рдХрд╛ рдЖрдХрд╛рд░, рд╕рд╛рде рд╣реА рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА SizeOf рдлрд╝рдВрдХреНрд╢рдиред
 public static int SizeOf(Treap treap) { return treap == null ? 0 : treap.Size; } public int? KthElement(int K) { Treap cur = this; while (cur != null) { int sizeLeft = SizeOf(cur.Left); if (sizeLeft == K) return cur.x; cur = sizeLeft > K ? cur.Left : cur.Right; if (sizeLeft < K) K -= sizeLeft + 1; } return null; } 

рдкреНрд░рдореБрдЦ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдкреЗрдбрд╝ рдореЗрдВ рд╕рд╣реА size рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рдПред рдЖрдЦрд┐рд░рдХрд╛рд░, рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдХреБрдВрдЬреА рдХреЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рдпреЗ рд╕рднреА рд╕рдВрдЦреНрдпрд╛рдПрдВ рдзреВрд▓ рдореЗрдВ рдЪрд▓реА рдЬрд╛рдПрдВрдЧреА, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рд░ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдорд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП - рдУ (рдПрди)! рд╣рд╛рд▓рд╛рдБрдХрд┐, рдирд╣реАрдВред рдУ (рдПрди) рдпрд╣ рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдиреЗ рдкреЗрдбрд╝ рдХреЛ рдЕрддреБрд▓рдиреАрдп рдирд┐рд░реНрдорд╛рдг рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ред рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдХреБрдВрдЬреА рдХрд╛ рдЬреЛрдбрд╝ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЛ рдирд╣реАрдВ рдЫреВрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рддреЛ рдЖрдк рдХрдо рд░рдХреНрдд рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ, рд╕рдм рдХреБрдЫ рдЖрдкрдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдкреНрд▓рд┐рдЯ рдФрд░ рдорд░реНрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдпрджрд┐ рдЖрдк рдкреЗрдбрд╝ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рджреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЖрдХрд╛рд░ - рддреЛ рдЕрдиреНрдп рд╕рднреА рдСрдкрд░реЗрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреЗрдбрд╝ рдореЗрдВ рдЕрдкрдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдХреЗрд╡рд▓ рдПрдХ рд╢реАрд░реНрд╖ рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХ рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ Size рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ 1 рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ!)ред
рдореИрдВ рдорд░реНрдЬ рдСрдкрд░реЗрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ред

рдорд░реНрдЬ рдирд┐рд╖реНрдкрд╛рджрди рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВред рдЙрд╕рдиреЗ рдкрд╣рд▓реЗ рдирдП рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП рдЬрдбрд╝ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдкреБрди: рдЕрдкрдиреЗ рдПрдХ рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рджреВрд╕рд░реЗ рдкреЗрдбрд╝ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдФрд░ рд╣рдЯрд╛рдП рдЧрдП рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦ рджрд┐рдпрд╛ред рдореИрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛ рдЬрдм рд╕рд╣реА рдЙрдкрдкреНрд░рдХрд╛рд░ рдХреЛ рдорд░реНрдЬ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рджреВрд╕рд░рд╛ рд╕рдордорд┐рдд рд╣реИред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреА рддрд░рд╣, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдЧреАред

рд╣рдо рдкреНрд░реЗрд░рдг рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ: рдорд░реНрдЬ рдХреЛ рдЙрдкрдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА, рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрди рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЗрдВ рд╣реИрдВ: рдмрд╛рдПрдВ рд╕рдмрдЯреНрд░реА рдореЗрдВ, рдЖрдпрд╛рдореЛрдВ рдХреА рд╕рд╣реА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЙрд╕реЗ рдЫреБрдЖ рдирд╣реАрдВ; рд╕рд╣реА рдореЗрдВ рднреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЧрдгрдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд░реНрдЬ рдХрд╛ рдирддреАрдЬрд╛ рд╣реИред рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдиреНрдпрд╛рдп рдХреЗрд╡рд▓ рдирдП рдкреЗрдбрд╝ рдХреЗ рдмрд╣реБрдд рдореВрд▓ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ! рдареАрдХ рд╣реИ, рдмрд╕ рдЕрдВрдд рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкреБрдирдГ size = left.size + right.size + 1 ( size = left.size + right.size + 1 ) , рдФрд░ рдЕрдм рдорд░реНрдЬ рдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдирдпрд╛ рдкреЗрдбрд╝ рдмрдирд╛рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдкрд░ рд╕рд╣реА рдЙрдк-рдЖрдХрд╛рд░ рд╣реИред

рдорд░реНрдЬ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛: рдЬрд╡рд╛рдм рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреБрдирд░реНрдЧрдгрдирд╛ рд░реЗрдЦрд╛ рдкрд░ред рд╡рд╣ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред
 public void Recalc() { Size = SizeOf(Left) + SizeOf(Right) + 1; } public static Treap Merge(Treap L, Treap R) { if (L == null) return R; if (R == null) return L; Treap answer; if (Ly > Ry) { var newR = Merge(L.Right, R); answer = new Treap(Lx, Ly, L.Left, newR); } else { var newL = Merge(L, R.Left); answer = new Treap(Rx, Ry, newL, R.Right); } answer.Recalc(); // ! return answer; } 

рдареАрдХ рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╕реНрдкреНрд▓рд┐рдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИ, рдЬреЛ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдкрд░ рднреА рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ: рдпрд╣рд╛рдВ, рдкреЗрдбрд╝ рдХреА рдЬрдбрд╝ рдореЗрдВ рдХреБрдВрдЬреА рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдордиреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдПрдХ рдХреЗ рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рдЙрдкрдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рджреВрд╕рд░рд╛ рдЕрд▓рдЧ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдлрд┐рд░ рд╕реЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреБрди: рдЯреАред рд░рд╛рдЗрдЯ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдкрд░рд┐рдЪрд┐рдд рдкреНрд░реЗрд░рдг рдкрд░рд┐рдХрд▓реНрдкрдирд╛ - рд╕реНрдкреНрд▓рд┐рдЯ рдХреЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕ рдмрд╛рд░ рднреА рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдВрдЧреЗред рдлрд┐рд░ рдЯреА.рд▓рд┐рдлреНрдЯ рдореЗрдВ рдЖрдпрд╛рдо рд╕рд╣реА рд╣реИрдВ - рдХрд┐рд╕реА рдиреЗ рдЙрдиреНрд╣реЗрдВ рдЫреБрдЖ рдирд╣реАрдВ; L 'рдореЗрдВ рдЖрдпрд╛рдо рд╕рд╣реА рд╣реИрдВ - рдпрд╣ рд╕реНрдкреНрд▓рд┐рдЯ рдХрд╛ рдмрд╛рдпрд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ; R 'рдореЗрдВ рдЖрдпрд╛рдо рд╕рд╣реА рд╣реИрдВ - рдпрд╣ рд╕рд╣реА рд╕реНрдкреНрд▓рд┐рдЯ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреЗрдбрд╝ рдПрд▓ рдХреА рдЬрдбрд╝ (x; y) рдкрд░ рдиреНрдпрд╛рдп рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЬрд╡рд╛рдм рддреИрдпрд╛рд░ рд╣реИред

рдирдИ рд╕реНрдкреНрд▓рд┐рдЯ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб, рдЬрд┐рд╕рдореЗрдВ рджреЛ рд╡рд░реНрдзрд┐рдд рд▓рд╛рдЗрдиреЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, L рдпрд╛ R рдХреЗ рд░реВрдЯ рдореЗрдВ Size рд╡реИрд▓реНрдпреВ рдХреЛ рд░рд┐рдХрд╡рд░ рдХрд░рддреА рд╣реИрдВред
 public void Recalc() { Size = SizeOf(Left) + SizeOf(Right) + 1; } public void Split(int x, out Treap L, out Treap R) { Treap newTree = null; if (this.x <= x) { if (Right == null) R = null; else Right.Split(x, out newTree, out R); L = new Treap(this.x, y, Left, newTree); L.Recalc(); //   L! } else { if (Left == null) L = null; else Left.Split(x, out L, out newTree); R = new Treap(this.x, y, newTree, Right); R.Recalc(); //   R! } } 

рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ "рдиреНрдпрд╛рдп рдХреА рдмрд╣рд╛рд▓реА" - рд╢реАрд░реНрд╖ рдкрд░ рдореВрд▓реНрдп рдХрд╛ рдкреБрдирд░реНрдЧрдгрдирд╛ - рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХрд▓ рдХрд┐рдпрд╛ред рдпрд╣ рдореВрд▓ рд░реЗрдЦрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкреВрд░реЗ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рд╡реГрдХреНрд╖ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЯрд┐рдХреА рд╣реБрдИ рд╣реИред рдФрд░ рдЬрдм рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ, рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ "рд░рд┐рдХрд╡рд░реА" рдХреЗ рд╕рд╛рде, рддреЛ рдЗрд╕реЗ рдкреВрд░реЗ рдХреНрд▓рд╛рд╕ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдмрджрд▓рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИ: рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдПрдВ рдмреЗрдЯреЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЙрдЪрд┐рдд рд╣реИ, рд╕рд╣реА рдмреЗрдЯреЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЙрдЪрд┐рдд рд╣реИ, рдФрд░ рдЗрди рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рд░реВрдЯ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдХрд┐ рд╡рдВрд╢рдЬреЛрдВ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрдкрдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ


рдЪрд▓рд┐рдП рдЕрд╕рд▓ рдЬрд┐рдВрджрдЧреА рдореЗрдВ рд▓реМрдЯрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдХреБрдВрдЬреА рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╕реНрдкрд┐рд░рд┐рдЯ Cost рдРрд╕реЗ рдирдП рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо рджреВрдВрдЧрд╛ред

рддреЛ, рдЖрдЗрдП рд╣рдореЗрд╢рд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдФрд░ рдХрднреА-рдХрднреА рд╣рдЯрд╛рдПрдВ), рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдПрдХ рд╕рдорд╛рди рдХреАрдордд рд╣реИ - Cost ред рдФрд░ рдЖрдкрдХреЛ рдЗрд╕ рд╕рднреА рдЧрдбрд╝рдмрдбрд╝ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдХреАрдордд рдкрд░ рддреЗрдЬреА рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдХреБрдЫ рдЙрдк-рдЦрдВрдб рдореЗрдВ: рдХрд╣рддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ 2007 рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдХреАрдордд рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛ рд╕рдХрддреА рд╣реИ (рдпрджрд┐ рдЪрд╛рдмрд┐рдпрд╛рдБ рд╕рдордп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдкрд░ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬрд╣рд╛рдВ A рдПрдХреНрд╕ < рдмреА )ред

рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрддрдо рднреА "рдмрд╣рд╛рд▓ рдиреНрдпрд╛рдп" рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рдмрд╕ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВ:
 public double Cost; //  public double MaxTreeCost; public static double CostOf(Treap treap) { return treap == null ? double.NegativeInfinity : treap.MaxTreeCost; } public void Recalc() { MaxTreeCost = Math.Max(Cost, Math.Max(CostOf(Left), CostOf(Right))); } 

рдпрд╣реА рд╕реНрдерд┐рддрд┐ рдиреНрдпреВрдирддрдо рдХреЗ рд╕рд╛рде рд╣реИ, рдФрд░ рдпреЛрдЧ рдХреЗ рд╕рд╛рде, рдФрд░ рддрддреНрд╡ рдХреЗ рдХреБрдЫ рдмреВрд▓рд┐рдпрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде (рддрдерд╛рдХрдерд┐рдд "рд░рдВрдЧ" рдпрд╛ "рдЕрдВрдХрди")ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 //  public double SumTreeCost; public static double CostOf(Treap treap) { return treap == null ? 0 : treap.SumTreeCost; } public void Recalc() { SumTreeCost = Cost + CostOf(Left) + CostOf(Right); } 

рдпрд╛:
 public bool Marked; //  public bool TreeHasMarked; public static bool MarkedOf(Treap treap) { return treap == null ? false : treap.TreeHasMarked; } public void Recalc() { TreeHasMarked = Marked || MarkedOf(Left) || MarkedOf(Right); } 

рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╛рдж рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдПрдХрдорд╛рддреНрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдирдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдиреЗ рдмрдирд╛рддреЗ рд╕рдордп рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХрд╣реЗрдВрдЧреЗ, рдЖрдк рдФрд░ рдореИрдВ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдкреЗрдбрд╝ рдХреЛ рдореЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рд░реВрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдпрджрд┐ рд╣рдо рдлрд┐рд░ рд╕реЗ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рдкреЗрдбрд╝ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрд╡рдЬреНрдЮрд╛ рдкрд░ рдХреНрд╡реЗрд░реА рднреА рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреА рдХреБрдВрдЬреА рдмрд╛рдИрдВ рд╕рдмрдЯреНрд░реА рдХреА рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рд╕реЗ рдмрдбрд╝реА рд╣реЛрддреА рд╣реИ рдФрд░ рджрд╛рдПрдВ рд╕рдмрдЯреНрд░реА рдХреА рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рд╕реЗ рдХрдо рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡рд╕реНрддреБрддрдГ рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреБрдВрдЬреА рдХреЗ рдХреБрдЫ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдЬреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддреЛ, рд░реВрдЯ рдкрд░ рдпрд╣ рдЕрдВрддрд░рд╛рд▓ (-+; + , ) рд╣реИ , рдЙрдирдХреЗ рдмрд╛рдПрдВ рдмреЗрдЯреЗ рдкрд░ (-x; x) , рджрд╛рдИрдВ рдУрд░ - (x; + тИЮ) , рдЬрд╣рд╛рдВ x рд░реВрдЯ рдореЗрдВ рдкреНрд░рдореБрдЦ рдореВрд▓реНрдп рд╣реИред рд╕рднреА рдЕрдВрддрд░рд╛рд▓ рджреЛрдиреЛрдВ рддрд░рдл рд╕реЗ рдЦреБрд▓реЗ рд╣реИрдВ, рдПрдХреНрд╕ рдХреЛ рд╕рд╣реА рд╕рдмрдЯреНрд░реА рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкреЗрдбрд╝ рдореЗрдВ рд╕рдорд╛рди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░, рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рддреБрд▓рдирд┐рддреНрд░ рдХреЛ рдЙрди рд╕рднреА рдХреЛ рдПрдХ рд╣реА рд╕рдмрдЯреНрд░реА рдореЗрдВ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ - рдХрд╣рддреЗ рд╣реИрдВ, рдмрд╛рдПрдВ рдПрдХ рдореЗрдВ - рддреЛ рдмрд╛рдПрдВ рдмреЗрдЯреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░рд╛рд▓ (-тИЮ; x] рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдВрдЪ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдкреЗрдбрд╝ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдЗрд╕реА рдЕрдВрддрд░рд╛рд▓ рдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╢реАрд░реНрд╖ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕ рд╢реАрд░реНрд╖ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдкрд░ рд╕рдВрдкреВрд░реНрдг рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ (рдЕрдзрд┐рдХрддрдо, рдпреЛрдЧ, рдЖрджрд┐) рдХреЗ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдФрд░ рд╣рдо рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВ [рдП; рдмреА) (рд╕реА ++ рдореЗрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЖрдзреЗ-рдЦреБрд▓реЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд╛рдПрдВ рдЫреЛрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рдПрдХ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдРрд╕рд╛ рдХрд░реВрдВрдЧрд╛)ред
рдЦрдВрдбреЛрдВ рдХреЗ рд╡реГрдХреНрд╖ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдпрд╣ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╣реА рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡рдВрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдзреАрд░реЗ-рдзреАрд░реЗ рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдирд╛ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдЕрдВрддрд░рд╛рд▓ рдпрд╛ рдЙрд╕рдХреЗ рдЯреБрдХрдбрд╝реЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬрд╝реА рд╕реЗ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдХрд╛рд░реНрдп рдкрд┐рдЫрд▓реЗ рдПрдХ рддрдХ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдХреИрдВрдЪреА рдХреЗ рдорд╛рд▓рд┐рдХ, рд╣рдо рдкрд╣рд▓реЗ рдкреЗрдбрд╝ рдХреЛ рдХреБрдВрдЬреА A-1 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред рд╕рд╣реА рд╕реНрдкреНрд▓рд┐рдЯ рдкрд░рд┐рдгрд╛рдо, рдЬреЛ рдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЗрд╕ рдмрд╛рд░ рдХреБрдВрдЬреА рдмреА рджреНрд╡рд╛рд░рд╛ред рдмреАрдЪ рдореЗрдВ, рд╣рдореЗрдВ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдбрд╝ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЪрд╛рдмрд┐рдпрд╛рдБ рд╡рд╛рдВрдЫрд┐рдд рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрддреА рд╣реИрдВред рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рд░реВрдЯ рдореЗрдВ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рджреЗрдЦреЗрдВ - рдЖрдЦрд┐рд░рдХрд╛рд░, рд╕реНрдкреНрд▓рд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП рдиреНрдпрд╛рдп рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдХрд╛рд▓реЗ рдХрд╛рдо рдХрд┐рдП рд╣реИрдВ :)

рдХреНрд╡реЗрд░реА рд░рди рд╕рдордп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ O (рд▓реЙрдЧ 2 рдПрди) рд╣реИ: рджреЛ рд╕реНрдкреНрд▓рд┐рдЯ рдирд┐рд╖реНрдкрд╛рджрдиред рдЕрдзрд┐рдХрддрдо рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб:
 public double MaxCostOn(int A, int B) { Treap l, m, r; this.Split(A - 1, out l, out r); r.Split(B, out m, out r); return CostOf(m); } 


рдЖрд╕реНрдердЧрд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреА рд╢рдХреНрддрд┐


рдЖрдЬ рдХреЗ рдПрд░реЛрдмреЗрдЯрд┐рдХреНрд╕ рдПрдХ рдкреЗрдбрд╝ рдХреЗ рдЬреАрд╡рди рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреБрдЫ рд╢реАрд░реНрд╖ рдкрд░ Cost рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рд╕рднреА рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдЙрдирдХреЗ рдЙрдкрдкреНрд░рдХрд╛рд░ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд┐рдд рдЙрддреНрддрд░ рд╣реИрдВ, рдЕрдм рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдУ (рдПрди) рдлрд┐рд░ рд╕реЗ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рджреНрд╡рд╛рд░ рдореЗрдВ рдирд╣реАрдВ рдЪрдврд╝рддрд╛ рд╣реИред рдХреНрдпрд╛ рдХрд░реЗрдВ?

рдЕрдЧрд░ рд╣рдо Cost рдЗрди рдП рд╕рд┐рдВрдЧрд▓ рдкреАрдХ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо, рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╛рдВрдЫрд┐рдд рддрддреНрд╡ рдкрд╛рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдмрджрд▓рддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░, рдиреАрдЪреЗ рд╕реЗ рдЬрдбрд╝ рддрдХ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдкрд░, рд╣рдо рдмрд╕ рдорд╛рдирдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдиреЛрдВ рдХреЛ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ - рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдо рд░реВрдЯ рд╕реЗ рд╢реАрд░реНрд╖ рддрдХ рдХреЗ рдорд╛рд░реНрдЧ рдкрд░ рдЧрдП рдереЗред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдмрд╣реБрдд рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдХрд╛рд░реНрдп рддреБрдЪреНрдЫ рд╣реИ: рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░реЗрдВ, рдХрдо рд╕реЗ рдХрдо рджреЛ рдЪрдХреНрд░, рд░рдирдЯрд╛рдЗрдо рдЕрднреА рднреА рдУ (рд▓реЙрдЧ 2 рдПрди) рд╣реИред

рдпрджрд┐ рдЖрдк рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЬреАрд╡рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдордЬреЗрджрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдЯреНрд░реА рд╣реИ, рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА Cost ред рдФрд░ рд╣рдо рдкреЗрдбрд╝ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ Cost рдореВрд▓реНрдп рдореЗрдВ рдПрдХ рд╣реА рд╕рдВрдЦреНрдпрд╛ рдП рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдпрд╛ рдЙрдкрд╢реАрд░реНрд╖рдХ - рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рджреЗрдЦреЗрдВ)ред рдпрд╣ рдПрдХ рдмрд╣реБрдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЦрдВрдб рдкрд░ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдЖрдк рд░реВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕реЗ Add ред рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╢реАрд░реНрд╖ рд╕реЗ рдмрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдкреВрд░реЗ рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЛ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬреЛ рдРрдб рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рджреЗрд░реА рд╣реЛрддреА рд╣реИ: рдпрджрд┐ рдЖрдкрдХреЛ рдП рдореЗрдВ рдЙрдк-рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рд░реВрдЯрд░реА рдореЗрдВ рдХреЗрд╡рд▓ рд░реВрдЯ Add рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдПрдХ рд╡рд╛рджрд╛ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ "рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрднреА-рдХрднреА, рдЖрдк рд╕рднреА рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдХрд░реЗрдВрдЧреЗред" рдЬрдм рддрдХ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддрдм рддрдХ рд╣рдо рдирд╣реАрдВ рдЬреАрддреЗрдВрдЧреЗред

рдлрд┐рд░ рдкреЗрдбрд╝ рдХреА рдЬрдбрд╝ рд╕реЗ Cost рдЕрдиреБрд░реЛрдз рдХреЛ рдПрдХ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреА рд╣реЛрдЧреА, рдЬрдбрд╝ рдХреЛ Cost рдЬреЛрдбрд╝рдирд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк Cost рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Cost рд░реВрдк рдореЗрдВ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛, рдЬреИрд╕реЗ рдХрд┐ рдкреЗрдбрд╝ рдХреА рдЬрдбрд╝ рдореЗрдВ рдЭреВрда рдмреЛрд▓рдирд╛ред рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдмрд╛рдд, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреЗрдбрд╝ рдореЗрдВ рдХреАрдорддреЛрдВ рдХрд╛ рдпреЛрдЧ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реВрдЯ рдореЗрдВ рдПрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ (!) SumTreeCost рдорд╛рди рд╣реИ, рдЬреЛ рдкреЗрдбрд╝ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рдпреЛрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЗрди рд╕рднреА рддрддреНрд╡реЛрдВ рдореЗрдВ рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред Add ред рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рд╕рд╣реА рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рд▓рдВрдмрд┐рдд рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдпрд╣ Size рдЧреБрдгрд╛ рдореВрд▓реНрдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ - SumTreeCost рдХреЛ рд╕рдмрдЯреНрд░реА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред

рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдкреЗрдбрд╝ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ - рд╕реНрдкреНрд▓рд┐рдЯ рдФрд░ рдорд░реНрдЬ - рдФрд░ рдЬрдм рд╣рдореЗрдВ рдЕрднреА рднреА рд╡рд╛рджреЗ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдФрд░ рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╡рд╛рджреЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдм рдореИрдВ рдЗрди рдореБрджреНрджреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

рд╕реНрдкреНрд▓рд┐рдЯ рдСрдкрд░реЗрд╢рди рдлрд┐рд░ рд╕реЗ рд╕рдордЭреЗрдВред рдЪреВрдВрдХрд┐ рдореВрд▓ рдкреЗрдбрд╝ рджреЛ рдирдП рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ, рдФрд░ рд╣рдо рдореВрд▓ рдПрдХ рдХреЛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рджреЗрд░реА рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрд░реНрдерд╛рддреН: рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рд╕реНрдкреНрд▓рд┐рдЯ рдХреЛ T.ight рдХреЗ рд╕рд╣реА рдЙрдк-рднрд╛рдЧ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред рдлрд┐рд░ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдлреЗрд░рдмрджрд▓ рдХрд░реЗрдВрдЧреЗ:

тАв рд╡рд╛рджреЗ рдХреЛ рдЬрдбрд╝ рдореЗрдВ рд░рдЦреЗрдВ, рдЬрдбрд╝ рдХрд╛ рдореВрд▓реНрдп Add рдЬрдбрд╝ Cost Add ред
  T.Cost + = T.Add; 
тАв рд▓реЗрдлреНрдЯ рдХреЗ рд╡рд╛рджреЗ рдХреЛ "рдХрдо" рдХрд░реЗрдВ: Add рднреА рдкреВрд░реЗ рд▓реЗрдлреНрдЯ рд╕рдмрдЯреНрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдмрд╛рдИрдВ рдУрд░ рдирд╣реАрдВ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕ рдЙрдкрдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЫреВрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмрд╕ рдПрдХ рд╡рд╛рджрд╛ рдХрд░реЛред
  T.Left.Add + = T.Add; 
тАв "рдЪрд▓реЛ" рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдВ: рд╕рдВрдкреВрд░реНрдг рд░рд╛рдЗрдЯ рд╕рдмрдЯреНрд░реА рдХреЗ рд▓рд┐рдП Add рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рд╕реНрдкреНрд▓рд┐рдЯ рдСрдкрд░реЗрд╢рди рд╕рд╣реА рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдЯреНрд░реА рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХреЗред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реНрд╡рдпрдВ рдПрдХ рдФрд░ рдЕрджреНрдпрддрди рдХрд░реЗрдЧрд╛ред
  T.Right.Add + = T.Add; 
тАв рд╣рдо рд╕реЗрдЯ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдкреНрд▓рд┐рдЯ рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджреЛ рд╕рд╣реА рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдкреЗрдбрд╝ рджрд┐рдПред
тАв рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдореВрд▓ рдореЗрдВ рд╡рд╛рджреЗ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛, рдФрд░ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╡рд╛рджреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд▓рд┐рдЦрд╛, рд░реВрдЯ Add рдХреЛ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  T.Add = 0; 
рд╕реНрдкреНрд▓рд┐рдЯ рдореЗрдВ рд╕рдмрдЯреНрд░реЗрд╕реЗрд╕ рдХреЗ рдЖрдЧреЗ рд▓рдЧрд╛рд╡ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╡рд╛рджреЛрдВ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рджреЛ рд╕рд╣реА рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдкреЗрдбрд╝ рд╣реИрдВ: рдХрд╣реАрдВ рдкреВрд░рд╛, рдХрд╣реАрдВ рдХреЗрд╡рд▓ рд╕реНрдердЧрд┐рдд, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХред

рд╕рднреА рдСрдкрд░реЗрд╢рди рдирдП рд╕реНрдкреНрд▓рд┐рдЯ рдбрд╛рдпрдЧреНрд░рд╛рдо рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдкрдбреЗрдЯ рдХреЗрд╡рд▓ рдЙрди рд╕рд┐рд░реЛрдВ рдкрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╕реНрдкреНрд▓рд┐рдЯ рдСрдкрд░реЗрд╢рди рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЪрд▓реЗрдЧрд╛, рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, рд╣рдо рд╡рд╛рджрд╛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░реЗрдВрдЧреЗред рдпрд╣реА рд╕реНрдерд┐рддрд┐ рдорд░реНрдЬ рдХреЗ рд╕рд╛рде рд╣реЛрдЧреАред

рдирдпрд╛ рдорд░реНрдЬ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдкреБрди: рд╕рд╣реА рдЗрдирдкреБрдЯ рдЯреНрд░реА R рдХреЗ рд╕рд╛рде L.Right рдХреЗ рд╕рд╣реА рд╕рдмрдЯреНрд░реА рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:

тАв рд╡рдЪрди рдХреЛ рдореВрд▓ L рдореЗрдВ рд░рдЦреЛред
  рдПрд▓ред рд▓рд╛рдЧрдд + = рдПрд▓ред рдЬреЛрдбрд╝реЗрдВ; 
тАв "рдЪрд▓реЛ" рдПрд▓ рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рд╕реЗ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдБ - рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдПред
  L.Left.Add + = L.Add;
   L.Right.Add + = L.Add; 
тАв рд╡рд╛рджрд╛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреВрд░рд╛ рд╣реБрдЖ рд╣реИ - рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред
  рдПрд▓.рдПрдб = 0; 
тАв рд╣рдо рдорд░реНрдЬ (L.Right, R) рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЗрд╕рдХреЗ рджреЛрдиреЛрдВ рддрд░реНрдХ рд╕рд╣реА рдХрд╛рд░реНрдЯрд┐рдпрди рд╡реГрдХреНрд╖ рд╣реИрдВред рдФрд░ рд╡рд╣ рд╣рдореЗрдВ рд╕рд╣реА рдкреЗрдбрд╝ рднреА рд▓реМрдЯрд╛рдПрдЧрд╛ред
тАв рд╣рдо рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рд╕рд╣реА рдмреЗрдЯреЗ рдХреЗ рд╕рд╛рде рд▓реМрдЯреЗ рдкреЗрдбрд╝ рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк - рд╡рд╛рджреЛрдВ рдкрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдкреЗрдбрд╝ред



рдЕрдм рдЬрдм рд╣рдо рдкреВрд░реЗ рдкреЗрдбрд╝ рдкрд░ рдЬрдбрд╝ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдкреНрд░рд╢реНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рддреЛ рдЙрдк-рдЦрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЙрд╕реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдКрдкрд░ рдХреЗ рдХреБрдЫ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред
рд╣рдо рд╕реНрдкреНрд▓рд┐рдЯ рдореЗрдВ рджреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЕрд▓рдЧ рдкреЗрдбрд╝ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХреБрдВрдЬреА рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдмрдЯреНрд░реА рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред
Add . .
Merge . , - .
:)

Recalc . , .


, , , . ┬л┬╗ тАФ , тАФ Cost , , . тАФ (1) , , Merge Split. , , , .

рд╕рд╛рд░рд╛рдВрд╢


, , , , . , , , , - .

, . ┬л ┬╗.

.

Source: https://habr.com/ru/post/In102006/


All Articles