ข้อนี้ต้องการหาว่าสำหรับอาเรย์ A[1..N] ที่มีค่าตั้งแต่ 1 ถึง N แบบไม่ซ้ำกัน จะมีกี่คู่ (l,r) ที่ A[l..r] มีค่ามัธยฐานเท่ากับ k
เคส N≤1000
จากนิยามของมัธยฐานจะสังเกตได้ว่า k จะต้องอยู่ใน A[l..r] และใน A[l..r] จะมีจำนวนค่าที่มากกว่า k เท่ากับจำนวนค่าที่น้อยกว่า k
กำหนดให้ x เป็นดัชนีที่ทำให้ A[x]=k และนิยาม C[i]=(A[i]>k)−(A[i]<k) กล่าวคือ C[i] เป็น 1 เมื่อ A[i]>k และ −1 เมื่อ A[i]<k
โจทย์จะกลายเป็นการหาจำนวนคู่ (l,r) ที่ทำให้ Σi=lxC[i]+Σi=xrC[i]=0 ซึ่งหมายความว่าใน A[l..r] มีจำนวนที่มากกว่า k และน้อยกว่า k เท่ากัน
นิยาม SL[l]=Σi=lxC[i] และ SR[r]=Σi=xrC[i] จะได้ว่า −N≤SL[l]≤N และ −N≤SR[l]≤N เพราะมีได้อย่างมาก N ตัวที่มากกว่าหรือน้อยกว่า k
สำหรับเคส n≤1000 สามารถไล่ทุกคู่ (l,r) ที่ l≤x≤r ได้โดยตรงและตรวจสอบว่า SL[l]+SR[r]=0 หรือไม่สำหรับแต่ละคู่
การคำนวณค่า C[1..N] SL[1..x] และ SR[x..N] ใช้เวลา O(N) การเช็คแต่ละคู่ (l,r) ใช้เวลา O(N2)
เคส N≤1000000
เมื่อกำหนัด Ls เป็นจำนวน l ที่ทำให้ SL[l]=s และ Rs เป็นจำนวน r ที่ทำให้ SR[r]=s จะได้ว่าคำตอบคือ ∑s=−NNLsR−s (เพราะเมื่อ SL[l]=s และ SR[r]=−s จะได้ว่า Σi=lxC[i]+Σi=xrC[i]=s−s=0)
เราสามารถคำนวณ Ls ได้โดยการไล่คำนวณ SL[l] ตั้งแต่ l=x ไปจนถึง l=1 และเพิ่ม Ls ทุกครั้งที่ SL[l]=s โดยเริ่มจาก SL[x]=0 และคำนวณ SL[l]=SL[l+1]+C[l] สำหรับ l ต่อๆ ไป สามารถใช้วิธีในทำนองเดียวกันในการคำนวณ Rs โดยคำนวณ SR[r] เริ่มจาก r=x ไปจนถึง r=N
Time Complexity: การคำนวณ SL[1..x] และ SR[x..N] เพื่อคำนวณ Ls และ Rs ใช้เวลารวมกัน O(N) และการคำนวณ ∑s=−NNLsR−s ใช้เวลา O(N) ทั้งหมดจึงใช้เวลา O(N)