рдЙрдк-рдЦрдВрдб рдЧрддрд┐рд╢реАрд▓рддрд╛: рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЗрдВ рдФрд░ "рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рджреЛ рдмреЗрд╣рддрд░ рд╣реИ"

рд╢реБрдн рд╕рдВрдзреНрдпрд╛

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ рд╢рд╣рд░ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдУрд▓рдВрдкрд┐рдпрд╛рдб рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреМрд░реЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдмреА "рдУрдХреНрд╕" рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛ред

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

рд╢рд░реНрдд



рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдпрд╣рд╛рдБ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рдд рд╣реИ (рдХреЗрд╡рд▓ рд╢рд░реНрддреЛрдВ рдХреЛ min.us рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдХрд┐рдВрд╡рджрдВрддреА рдХреЛ рдореЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрди рдХрд╛рд░реНрдп рд╢реЗрд╖ рд╣реИ:





рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ (рдкрдж рдХрд╛ рдирд╛рдо рдЖрдкрдХреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░



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



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

рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЬрдм рд╣рдорд╛рд░реА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдкреЗрдбрд╝ рдирд╣реАрдВ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреЗрдбрд╝ 4 рдФрд░ 9)? рдпрд╣рд╛рдВ рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдЕрдВрддрд░рд╛рд▓ рдкрд░ рд╕рднреА рдкреЗрдбрд╝реЛрдВ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ? рдПрдХ рд▓рд╛рд▓рдЪреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд▓реЛрднрди рд╣реИ: рдиреАрдЪреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рдкреЗрдбрд╝ рдХреЛ рдХрд╛рдЯ рджреЗрдВ рдФрд░ рдЬрдм рддрдХ рд╡реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЧрд▓рдд рд╣реИ:



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

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



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реГрдХреНрд╖ 4 рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реГрдХреНрд╖ 3 рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред

рдЙрддреНрддрд░ рд╡рд╕реВрд▓реА



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

рдЙрддреНрддрд░ рд╡рд╕реВрд▓реА
vector < int > ans ; //

// a b - ,

void deleteAll ( int a, int b ) {

assert ( del [ a ] [ b ] >= 0 ) ;

if ( del [ a ] [ b ] == a ) return ;

deleteAll ( a, del [ a ] [ b ] ) ;

deleteAll ( del [ a ] [ b ] , b ) ;

ans. push_back ( del [ a ] [ b ] ) ;

}



//

void restoreAns ( int a, int b ) {

assert ( fr [ a ] [ b ] >= 0 ) ;

if ( fr [ a ] [ b ] == a ) {

deleteAll ( a, b ) ;

return ;

}

restoreAns ( a, fr [ a ] [ b ] ) ;

restoreAns ( fr [ a ] [ b ] , b ) ;

}






рдХрд╛рдо рдХрд╛ рд╕рдордп



рдХреБрд▓ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдЧрддрд┐рдХреА рдХрд╛ O (n 2 ) рд░рд╛рдЬреНрдп рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ рдЙрдк-рдЦрдВрдб рдХреЗ рд▓рд┐рдП рдПрдХ)ред рдкреНрд░рддреНрдпреЗрдХ рдЧрддрд┐рдХреА рдореЗрдВ, рд╕рдВрдХреНрд░рдордг O (n) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдЕрдВрджрд░ рдкреЗрдбрд╝ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ред рдЬрд╡рд╛рдм рдмрд╣рд╛рд▓ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдШрди рд╕реЗ рдХрдо asymptotically (рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ n рдкрд░ рдХрдо) рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЙрдкреЗрдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреБрд▓ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдордп O (n 3 ) рд╣реИ , рдЬреЛ n = 200 рдкрд░ O (8 * 10 6 ) рд╣реИ , рдЬреЛ рддреБрд░рдВрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рднреА рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред

рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ?



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдРрд░реЗ / рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рдХрд░рдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред

рдкреНрд░рдердо рд╡рдХреНрддрд╛



рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рд╕рднреА рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рд╕рд░рдгреА int del [a] [b] - -1 рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ рдпрджрд┐ рдЕрдВрддрд░рд╛рд▓ (a, b) рдкрд░ рд╕рднреА рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рдкреЗрдбрд╝ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрд▓рдЧ рд╣реИред

рдЙрдк-рдЦрдВрдбреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рджреЛ рдЪрдХреНрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдХрд░реНрд╖рдХ рд╣реИ:

for ( int left = 0 ; left < n ; left ++ )

for ( int right = left ; right < n ; right ++ ) {

// ...

}






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

for ( int l = 2 ; l < n ; l ++ )

for ( int a = 0 ; a + l < n ; a ++ ) {

int b = a + l ;

// ...

}






рдЗрд╕ рдЪрдХреНрд░ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдВрддрд┐рдо рдкреЗрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЦрд╛рд▓реА рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЛ рдЖрд░рдВрдн рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ:

// h2, h1 h3

bool can ( int h1, int h2, int h3 ) {

if ( h1 < h2 && h3 < h2 ) return true ;

if ( h1 > h2 && h3 > h2 ) return true ;

return false ;

}



// ...

for ( int a = 0 ; a + 1 < n ; a ++ )

del [ a ] [ a + 1 ] = a ;



for ( int l = 2 ; l < n ; l ++ )

for ( int a = 0 ; a + l < n ; a ++ ) {

int b = a + l ;

for ( int i = a + 1 ; i < b ; i ++ )

if ( del [ a ] [ i ] >= 0 && del [ i ] [ b ] >= 0 && can ( h [ a ] , h [ i ] , h [ b ] ) ) {

del [ a ] [ b ] = i ;

break ;

}

}






рджреВрд╕рд░рд╛ рд╡рдХреНрддрд╛



рд╣рдо рджреВрд╕рд░реА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рджреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ - int dyn [a] [b] рдФрд░ int fr [a] [b] ред рдкрд╣рд▓рд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдПрдХ рдЧреИрд░-рдШрдЯрддреЗ рдХреНрд░рдо рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕рд┐рд▓реЗрд╢рди рдХрд╛ рдЙрддреНрддрд░ (рдХрд┐рддрдиреЗ рдиреНрдпреВрдирддрдо рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рдпрд╛ рдЕрдирдиреНрддрддрд╛ (рдореИрдВ 10 9 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)ред рдФрд░ рджреВрд╕рд░реЗ рд╕рд░рдгреА рдореЗрдВ рд╣рдо рдпрд╛ рддреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ -1 рдпрджрд┐ рдЕрдирдВрдд рдкрд╣рд▓реЗ, рдпрд╛ рдЖрдЦрд┐рд░реА рджреВрд░рд╕реНрде рдкреЗрдбрд╝ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЖрдк рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рдЕрд▓рдЧ рд▓реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗрд╡рд▓ рд╢рд┐рд╢реБрдУрдВ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ):

//

for ( int l = 1 ; l < n ; l ++ )

for ( int a = 0 ; a + l < n ; a ++ ) {

int b = a + l ;

if ( h [ a ] > h [ b ] ) continue ; // ,

if ( del [ a ] [ b ] >= 0 ) { // ,

dyn [ a ] [ b ] = b - a - 1 ;

fr [ a ] [ b ] = a ;

}



for ( int i = a + 1 ; i < b ; i ++ ) {

// , ,

// -

if ( h [ a ] > h [ i ] || h [ i ] > h [ b ] ) continue ;



// ,

// ,

int cans = dyn [ a ] [ i ] + dyn [ i ] [ b ] ;

if ( dyn [ a ] [ b ] > cans ) {

dyn [ a ] [ b ] = cans ;

fr [ a ] [ b ] = i ;

}

}

}






рдЙрддреНрддрд░ рд╡рд╕реВрд▓реА



рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЙрддреНрддрд░ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВ:

int a = 0 , b = n - 1 ;

if ( fr [ 0 ] [ n - 1 ] < 0 ) printf ( "-1 \n " ) ;

else {

ans = vector < int > ( ) ;

restoreAns ( a, b ) ;

printf ( "%d \n " , ans. size ( ) ) ;

for ( int i = 0 ; i < ans. size ( ) ; i ++ )

printf ( "%d \n " , ans [ i ] + 1 ) ;

}






рд╕рднреА рдПрдХ рд╕рд╛рде



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

рдкрд░реАрдХреНрд╖рдг



рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╡рд┐рд╖рдп рдкрд░, рдЖрдк рдХрдИ рдмрдбрд╝реЗ рд▓реЗрдЦ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдЬрд▓реНрджреА, рд╕рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рд╣рдордиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдерд╛, рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рдЕрдирдкреИрдХ рдХрд┐рдпрд╛ (рдХрд╛рд░реНрдп рдХреЛ рдУрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдпрд╛ рддреЛ рд╕рднреА 50 рдкрд░реАрдХреНрд╖рдг рдкреЗрди рд╕реЗ рдЪрд▓рд╛рдПрдВ , рдпрд╛ check.dpr рдлрд╝рд╛рдЗрд▓ ( рд╕рдВрдХрд▓рд┐рдд ) рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ CMD рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВ:

@echo off

for %% i IN ( tests\ ?? ) DO (

del oaks. in oaks. out > nul 2 >& 1

copy %% i oaks. in > nul 2 >& 1

main > nul 2 >& 1

if errorlevel 1 exit

check oaks. in oaks. out %% i. a

if errorlevel 1 exit

)

echo ALL IS OK !

pause






рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдиреЗ рд╢рд┐рд▓рд╛рд▓реЗрдЦ рджреЗрдЦрд╛ рддреЛ рдареАрдХ рд╣реИ! рдФрд░ "рдХреЛрдИ рднреА рдХреБрдВрдЬреА рджрдмрд╛рдПрдВ" - рдЖрдкрдХрд╛ рдирд┐рд░реНрдгрдп рд╕рд╣реА рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реИ рдЬрд┐рд╕ рдкрд░ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдордд рдХрд░реЛ - рдпрд╣ рдмрдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖



рдпрд╣реА рд╕рдм рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рдм рдХреБрдЫ рд╕рдордЭ рдЧрдП рд╣реЛрдВрдЧреЗ рдФрд░ рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рд╕рдордп рд╡реНрдпрд░реНрде рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдореБрдЭреЗ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред



All Articles