P3765 總統選舉

cxqghzj發表於2024-05-03

題意

給定一個序列,表示 \(n\) 個人每個人給 \(a_i\) 投了一票。

每次操作給定序列 \([l, r]\),求 \([l, r]\) 的眾數。

\([l, r]\) 沒有絕對眾數則令該區間的眾數為 \(p\),並將隨後給定的 \(k\) 個整數,\(a_{s_1}, a_{s_2}, ... a_{s_k}\) 改為 \(p\)

Sol

摩爾投票。

一句話總結,就是設二元組 \((x, y)\),表示當前數為 \(x\),權值為 \(y\)

若合併兩個二元組 \((x_1, y_1), (x_2, y_2)\)\(y\) 較大的 \(x\)\(y\) 相減,若 \(x\) 相同,則 \(y\) 相加。

這個玩意顯然是滿足結合律的。

考慮使用線段樹維護這個東西。

但是有個問題,摩爾投票保證若 區間有眾數 則留下的一定是眾數,若區間沒有眾數,求出來的不一定是眾數。

可以考慮用一顆平衡樹判斷每一次操作的是否是區間的眾數。

複雜度:\(O(n \log n)\)

相關文章