水群時看到了,記一下。
形式地,設查詢的資訊構成半群。
分塊,將資訊分成 \(B\) 塊,則每塊長度為 \(\dfrac{n}{B}\)。
考慮暴力處理每塊的字首、字尾答案,暴力處理每個整塊間的答案,取 \(B=O(\sqrt{n})\),預處理複雜度是 \(O(n)\) 的。
現在,對於跨越整塊的詢問,我們可以 \(O(1)\) 查詢,但是,對於塊內的詢問,我們只能暴力查詢。
不過,塊內詢問出現的機率為 \(O(\dfrac{1}{B})\),單次詢問的複雜度為 \(O(B)\),因此期望下複雜度是 \(O(1)\) 的。
即使有毒瘤出題人試圖卡掉這種做法,先不提是否存在替代,我們可以微調塊長,使得難以構造大量塊內查詢,同時這類資料可能讓暴力透過。