← 返回首頁
Mo's Algorithm 莫隊算法
預設範例:
小陣列 (n=8, q=5)
中等 (n=12, q=8)
區間不重複數 (n=10, q=6)
載入
開始演算
重置
紅框 = L 指標,藍框 = R 指標,綠色背景 = 當前區間 [L, R]
陣列 & 指標
L(左指標)
R(右指標)
當前區間
請載入預設範例後點擊「開始演算」
目前查詢:
-
L 移動次數:
0
R 移動次數:
0
總移動次數:
0
區間答案:
-
查詢列表(排序前 vs 排序後)
原始查詢順序
Mo 排序後(按 block 再按 R)
演算法說明
Mo's Algorithm
透過對查詢的特殊排序,讓 [L, R] 指標的移動總量降到 O((n+q)√n)。
分塊
:將陣列分成大小 √n 的塊
排序規則
:先按 L 所在的塊編號排序;同一塊內,偶數塊按 R 遞增,奇數塊按 R 遞減(之字形優化)
L/R 指標
:每次將指標從當前區間移到目標區間,途中用 add/remove 維護答案
複雜度
:O((n+q)√n),比樸素的 O(n×q) 快得多
限制
:只能離線(需要先知道所有查詢);不支援修改操作(帶修莫隊除外)