ใช้ต้นไม้เซกเมนต์ - พาร์ติชันแบบเรียกซ้ำของช่วงเป็นช่วงที่เล็กลง แต่ละช่วงเวลาของการดำเนินการอัพเดตของคุณสามารถแบ่งพาร์ติชันเป็นของช่วงในพาร์ติชันแบบเรียกซ้ำนี้ สำหรับแต่ละช่วง store:[ a , b ] O ( บันทึกn ) [ x , y ][1,n][a,b]O(logn)[x,y]
- จำนวนของช่วงที่ได้รับการเพิ่มขึ้นและลดลงไม่เช่นนั้นเป็นหนึ่งในช่วงที่เป็นที่แบ่งพาร์ติชัน[ a , b ] [ x , y ] [ a , b ]c(x,y)[a,b][x,y][a,b]
- จำนวนของเซลล์ที่ไม่ครอบคลุมโดยชุดย่อยที่แบ่งพาร์ติชันของช่วงเวลาที่เป็นหรือต่ำกว่าในการเรียกซ้ำ[ x , y ]u(x,y)[x,y]
จากนั้นถ้าถูกแบ่งซ้ำเป็นและเรามี
เพื่อให้เราสามารถอัปเดตแต่ละค่าในเวลาคงที่เมื่อข้อมูลอื่นสำหรับ การเปลี่ยนแปลงช่วง แต่ละแบบสอบถามการสนับสนุนสามารถตอบได้โดยดูที่n)[x,y][x,z][z+1,w]
u(x,y)={0u(x,z)+u(z+1,y)if c(x,y)>0otherwise
u(x,y)u(1,n)
ในการดำเนินการเพิ่ม , แบ่งพาร์ติชันลงในช่วง , เพิ่มค่าสำหรับแต่ละช่วงเหล่านี้และใช้สูตรด้านบนเพื่อคำนวณสำหรับแต่ละช่วงเหล่านี้และแต่ละบรรพบุรุษของพวกเขา การดำเนินการลดลงจะเหมือนกันกับลดลงแทนการเพิ่มขึ้น[ a , b ] O ( บันทึกn ) c ( x , y ) u ( x , y )(a,b)[a,b]O(logn)c(x,y)u(x,y)