ให้ คือจำนวนบ้านที่เศรษฐีมีในตอนนี้ แน่นอนว่าถ้า คำตอบจะเป็น NO
เสมอ ดังนั้นเราจึงเหลือแค่กรณีที่
พิจารณาต้นไม้ ของเราในปัจจุบันที่มีขนาด เราจะทำการ root ที่ node หมายเลข 1 จากนั้นนิยาม เป็นจำนวน node ใน subtree ของ (รวม ด้วย) ข้อสังเกตสำคัญในการแก้โจทย์ข้อนี้คือ "เศรษฐีจะสามารถแบ่งสมบัติตามที่โจทย์ต้องการก็ต่อเมื่อมีจุดยอด ที่ จำนวน จุดพอดี"
ปัญหาของเราจึงกลายเป็นการเก็บและอัพเดทค่า หลังจากบ้านแต่ละหลังถูกสร้างขึ้น หากเราแก้ปัญหานี้ตรง ๆ จะใช้เวลา ซึ่งจะไม่ทันเวลา
เพื่อที่จะ optimize อัลกอริธึมของเรา เราจะสร้าง tree ต้นเต็มเก็บไว้ก่อน จากนั้นในแต่ละจุดยอด เราจะมีอาเรย์ 1 มิติขนาด โดยเราจะเรียกอาเรย์นี้ว่า โดยที่ จะเก็บ จำนวนจุดยอด ใน subtree ของ (รวม ด้วย) ที่
ในการเก็บและอัพเดทค่า ให้เราสังเกตว่าในการสร้างบ้านใหม่แต่ละครั้ง จุดยอดที่มีค่า เปลี่ยนแปลงไปจะเป็นจุดยอดบน path จากจุดยอดหมายเลข 1 ถึงจุดยอดหมายเลข เท่านั้น ปัญหานี้จึงกลายเป็นปัญหา range update บน tree ซึ่งสามารถทำได้ใน โดย Heavy-Light Decomposition
เราจะตอบ YES
ก็ต่อเมื่อ
ในการอัพเดทใน segment tree ใน Heavy-Light Decomposition จะใช้เวลา ไปด้วย ทำให้เราสามารถแก้โจทย์ข้อนี้ในเวลา