рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рдЦрдВрдбреЛрдВ рдкрд░ рдЕрдзрд┐рдХрддрдо рдЦреЛрдЬрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рд▓рдВрдмрд╛рдИ N рдХреА рдПрдХ рд╕рд░рдгреА A рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирдВрдмрд░ K It N рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рд░рдгреА рдХреЗ рд▓рдВрдмрд╛рдИ K рдХреЗ рдЙрдк-рдЦрдВрдбреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХрддрдо (рдиреНрдпреВрдирддрдо, рдпреЛрдЧ ...) рдЦреЛрдЬрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ RMQ рд╕рдорд╕реНрдпрд╛ (рд░реЗрдВрдЬ рдиреНрдпреВрдирддрдо рдХреНрд╡реЗрд░реА) рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде, рдЦреЛрдЬ рдЦрдВрдб рдХреА рдирд┐рд░рдВрддрд░ рд▓рдВрдмрд╛рдИред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ, рдХрд╛рд░реНрдп рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдзрд┐рдХрддрдо рдЦреЛрдЬрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди


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

рдирд┐рд░реНрдгрдп


preprocessing

рдореВрд▓ рд╕рд░рдгреА A рдХреЛ рд▓рдВрдмрд╛рдИ K-1 (рдХреНрдпреЛрдВ K-1, рдереЛрдбрд╝рд╛ рдХрдо рд╕рдордЭреЗрдВ) рдХреЗ рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред рдлрд┐рд░ рд╣рдо рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд░рдгрд┐рдпреЛрдВ B рдФрд░ C рдХреА рдЧрдгрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

рдмреА рдореЗрдВ [i] рд╣рдо рд╡рд░реНрддрдорд╛рди рдмреНрд▓реЙрдХ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ ith рддрддреНрд╡ рддрдХ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ;
рд╕реА рдореЗрдВ [i] рд╣рдо рдЗрде рддрддреНрд╡ рд╕реЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдХреЛ рд╡рд░реНрддрдорд╛рди рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рддрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреА [2] рдореЗрдВ рд╣рдо рдЕрдзрд┐рдХрддрдо рдХреЛ рдП [0] рд╕реЗ рдП [реи] рддрдХ рдФрд░ рд╕реА рдореЗрдВ [реи] - рдП [реи] рд╕реЗ рдП [рей] рддрдХ рдХрд╛ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЧреНрд░рд╣ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдСрдкрд░реЗрд╢рди рдУ (рдПрди) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдВрдХрдбрд╝рд╛ N = 22, K = 5 рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ:



рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ

рдЕрдм, рдЗрд╕ рд╕рд░рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреА рдорджрдж рд╕реЗ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рдВрдмрд╛рдИ рдХреЗ рд╕реЗрдЧрдореЗрдВрдЯ рдкрд░ рдЕрдзрд┐рдХрддрдо рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рдВрдмрд╛рдИ рдХреЗ -1 рдХреЛ рдмреНрд▓реЙрдХ рдмрдирд╛рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рдХреНрд╡реЗрд░реА рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рджреЛ рдкрдбрд╝реЛрд╕реА рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рдкрдбрд╝реЗрдВред рдФрд░, рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рд╕реАрдорд╛ рдореЗрдВ 2 рдмреНрд▓реЙрдХреЛрдВ рдХреА рд╕реАрдорд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреАред рд╣рдо рдЗрд╕реЗ рдЯреА рдХрд╣рддреЗ рд╣реИрдВред рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдмрд╛рдПрдВ рдХрд┐рдирд╛рд░реЗ рдХреЛ l, рдФрд░ рджрд╛рдИрдВ рдУрд░ r рд╣реИред рдЕрдм, рдЕрдзрд┐рдХрддрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдзрд┐рдХрддрдо (C [l], B [r]) рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, L рд╕реЗ T рддрдХ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ C [l] рдЕрдзрд┐рдХрддрдо рд╣реИ, рдФрд░ B [r] T рд╕реЗ r рдореЗрдВ рдЕрдзрд┐рдХрддрдо рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, C [l] рдФрд░ B [r] рдореЗрдВ рдЕрдзрд┐рдХрддрдо l рд╕реЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рд╣реЛрдЧрд╛ред рдЖрд░ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╕реА ++ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ;

vector< int > B, C; void build(const vector< int > A, int k) { int n = A.size(); B.resize(n); C.resize(n); k--; //  B for(int i = 0; i < n; i++) { if(i % k) B[i] = max(A[i], B[i - 1]); else B[i] = A[i]; } //  C C.back() = A.back(); for(int i = n - 2; i >= 0; i--) { if((i + 1) % k) C[i] = max(A[i], C[i + 1]); else C[i] = A[i]; } } int GetMax(int l, int k) { return max(C[l], B[l + k - 1]); } 


рдЙрдЪрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдпрд╣ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдмрд┐рд▓реНрдб рдФрд░ рдЧреЗрдЯрдореИрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИ K рд╕рдорд╛рди рд╣реЛред

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

 void build(const vector< int > A, int k) { int n = A.size(); B.resize(n); C.resize(n); B.front() = A.front(); C.back() = A.back(); k--; for(int i1(1), i2(n - 2); i1 < n; i1++, i2--) { B[i1] = (i1 % k) ? max(A[i1], B[i1 - 1]) : A[i1]; C[i2] = ((i2 + 1) % k) ? max(A[i2], C[i2 + 1]) : A[i2]; } } 


рдкрд░рд┐рдгрд╛рдо


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

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд▓реЗрдЦрдХ рд╡рд╛рди рд╣рд░реНрдХ рдХрд╛ рд╣реИред


рд╕рдВрджрд░реНрдн


рдЖрд░рдПрдордХреНрдпреВ рдЪреИрд▓реЗрдВрдЬ - 1. рд╕реНрдЯреЗрдЯрд┐рдХ рдЖрд░рдПрдордХреНрдпреВ
RMQ рд╕рдорд╕реНрдпрд╛ - 2. рд▓рд╛рдЗрди рдЯреНрд░реА
рд╕реНрдЯреИрдХ рдХреЗ рд╕рдВрд╢реЛрдзрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди (рдИ-рдореИрдХреНрд╕рдПрдХреНрд╕)
RMQ (рдИ-рдореИрдХреНрд╕рдПрдХреНрд╕) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ
рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ)

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


All Articles