Flat Mountain

o62_mar_c1_flat2

กำหนดให้ AA เป็นอาร์เรย์ที่ประกอบไปด้วยความสูงของสันเขา และ AiA_i แทนความสูงของสันเขาที่ ii

สังเกตว่าในการดึงสันเขา ขนาดของช่วงที่มีความสูงเท่ากัน จะเปลี่ยนแปลงก็ต่อเมื่อ h∈Ah \in A ดังนั้นในการหาคำตอบ เราจึงจำเป็นต้อง พิจารณา hh ที่แตกต่างกันเพียง nn ค่าเท่านั้น

เราจะพิจารณา h=A1,A2,…,Anh = A_1, A_2, \dots, A_n โดยสำหรับแต่ละค่า h=Aih = A_i เราจะหาขนาดของช่วงที่ติดกัน เมื่อช่วงดังกล่าวต้องมีสันเขาที่ ii ประกอบอยู่ด้วย

สังเกตว่าสันเขาภายในช่วงดังกล่าว ความสูงเดิมจะต้องมีค่าไม่น้อยกว่า AiA_i และสันเขาที่ถัดจากช่วงนี้ไปทางซ้ายและขวา จะมีความสูงน้อยกว่า AiA_i มิฉะนั้น จะต้องรวมสันเขานี้เข้าไปในช่วงด้วย ดังนั้น กำหนดให้ช่วง [l,r][l, r] เมื่อ l≤i≤rl \leq i \leq r เป็นช่วงของสันเขา AiA_i เราจะได้ว่า min⁡{Al,Al+1,…,Ar}≥Ai\min\{A_l, A_{l + 1}, \dots, A_r\} \geq A_i

หากเราไล่ l,rl, r ทีละค่า จะใช้เวลา O(n)\mathcal{O}(n) ต่อการหาขนาดช่วงหนึ่งครั้ง แต่เราสามารถลดเวลาการทำงานลง ด้วยคุณสมบัติที่ว่า หาก min⁡{Ax,Ax+1,…,Ai}≥Ai\min\{A_x, A_{x + 1}, \dots, A_i\} \geq A_i ก็จะได้ว่า min⁡{Ax′,Ax′+1,…,Ai}≥Ai\min\{A_{x'}, A_{x' + 1}, \dots, A_i\} \geq A_i เมื่อ x′>xx' > x เช่นกัน และหาก min⁡{Ai,Ai+1,…,Ay}≥Ai\min\{A_i, A_{i + 1}, \dots, A_y\} \geq A_i ก็จะได้ว่า min⁡{Ai,Ai+1,…,Ay′}≥Ai\min\{A_i, A_{i + 1}, \dots, A_{y'}\} \geq A_i เมื่อ y′<yy' < y เช่นกัน

จากคุณสมบัติดังกล่าว เราจึงสามารถ Binary Search ค่า xx และ yy ที่น้อยที่สุดและมากที่สุดตามลำดับ จะทำให้ได้ค่า ll และ rr จึงสรุปได้ว่าขนาดช่วงที่ประกอบไปด้วยสันเขา ii จะมีค่าเป็น r−lr - l นั่นเอง โดยสำหรับการหา min⁡{Ax,Ax+1,…,Ai}\min\{A_x, A_{x + 1}, \dots, A_i\} และ min⁡{Ai,Ai+1,…,Ay}\min\{A_i, A_{i + 1}, \dots, A_y\} เราสามารถใช้ Segment Tree ที่รองรับการหาค่าที่น้อยที่สุดในช่วง ทำให้การคิดขนาดช่วงแต่ละสันเขา ใช้เวลาเพียง O(log⁡n)\mathcal{O}(\log n) หรือ O(log⁡2n)\mathcal{O}(\log^2 n) ขึ้นกับ Implementation

เมื่อทราบขนาดช่วงของแต่ละสันเขาเป็นที่เรียบร้อยแล้ว สำหรับปัญหาย่อยที่ 1, 2 และ 3 เราจะตอบความสูงของสันเขาที่มากที่สุดที่ขนาดช่วงมีค่าเท่ากับ ww หรือ −1-1 หากไม่มีสันเขาดังกล่าว

สำหรับปัญหาย่อยที่ 4 เราจะเก็บคำตอบในอาร์เรย์ WW เมื่อ WiW_i เป็นความสูงของสันเขาที่มากที่สุดที่ขนาดช่วงมีค่าเท่ากับ ii หรือ −1-1 หากไม่มีสันเขาดังกล่าว ขณะที่คิดขนาดช่วงของสันเขาที่ ii สมมติให้ขนาดที่ได้เป็น kk เราก็จะกำหนดให้ Wk:=max⁡(Wk,Ai)W_k := \max(W_k, A_i) นั่นเอง

Time Complexity: O(nlog⁡n)\mathcal{O}(n \log n) หรือ O(nlog⁡2n)\mathcal{O}(n \log^2 n)