อัลกอริธึมที่เราจะใช้ในการแก้โจทย์ข้อนี้คือ MO's Algorithm ซึ่งจะสามารถตอบ query รูปแบบเฉพาะแบบ offline ได้ในเวลา เมื่อ คือขนาดของอาร์เรย์และ คือจำนวนคำถาม
หลังจากที่เราได้เรียงลำดับคำถามตามเงื่อนไขของ MO's Algorithm เรียบร้อยแล้ว เราจะต้องหาวิธีอัพเดทคำตอบเมื่อเราทำการเปลี่ยนแปลงอาร์เรย์ของเราโดยการเพิ่มสมาชิกเข้าหรือตัดสมาชิกออกได้เร็ว ๆ
สมมติว่าเรามีคำตอบอยู่สำหรับอาร์เรย์หนึ่ง แล้วเราต้องการจะเพิ่มตัวเลข เข้าไปในอาร์เรย์นี้ ให้ เป็นจำนวนครั้งที่ ปรากฏขึ้นในอาร์เรย์ก่อนเพิ่ม เราจะได้ว่า หลังจากเพิ่ม เข้ามาในอาร์เรย์ คำตอบของเราจะเปลี่ยนไปเท่ากับ ซึ่งสามารถคำนวณได้โดยตรงถ้าเรารู้ค่า และ
ในทำนองเดียวกัน ถ้าเราต้องการจะลบตัวเลข ออกจากอาร์เรย์ คำตอบของเราจะเปลี่ยนไปเท่ากับ ซึ่งสามารถคำนวณได้โดยตรงเช่นกัน
หลังจากเราเปลี่ยนคำตอบแล้ว เราจะต้องอัพเดทค่าของ ไปด้วย ซึ่งในข้อนี้สามารถใช้อาร์เรย์ได้ เนื่องจากค่าในอาร์เรย์จะไม่เกิน
การอัพเดทแต่ละครั้งจึงใช้เวลา
การยกกำลังในการคำนวณนิพจน์ทางคณิตศาสตร์ข้างต้นสามารถทำได้เร็ว ๆ โดยการใช้ Exponentiation by Squaring ซึ่งจะทำงานใน เมื่อ คือเลขชี้กำลัง
ทั้งนี้ สูตรการคำนวณทั้งหมดไม่มีการหารเลย จึงสามารถคำนวณใน modulo ของตัวเลขที่ไม่ใช่จำนวนเฉพาะก็ได้ เพราะใน modulo ของตัวเลขที่ไม่ใช่จำนวนเฉพาะเราอาจจะหา inverse การคูณไม่ได้
เราจึงสามารถแก้โจทย์ข้อนี้ได้ในเวลา