省選模擬50 題解

2022-03-16 18:34:38 字數 1166 閱讀 2843

超級鋼琴、異或粽子、異或之幾道題都是這個套路。

對於每個右端點不斷找區間最優解,然後把原區間分割為兩個區間。

用乙個堆來時刻找到最大值。

所以這個題要解決的就是乙個點和區間內所有點的最大距離。

點集合並的問題,直接搞乙個線段樹維護直徑就好了。

考慮位運算的一些性質,可以按位考慮。

對於每一位而言,如果區間不同,執行 $or\ 1$ 或者 $and\ 0$ 操作之後,會使整個區間相同。

所以說這個操作實際上意味著區間推平。

當線段樹區間內存在乙個位滿足當前不平,並且可以被該操作推平,那麼就暴力遞迴下去。

是否存在的判斷可以直接通過維護區間的 $or$ 和 $and$ 然後用位運算實現。

否則直接打乙個標記來表示給區間整體執行 $or$ 和 $and$ 的操作。

對二進位制下的每一位勢能分析一下,可以得知複雜度是兩個 $log$ 的。

所以問題是咋維護兩個標記,來表示給區間執行 $or$ 和 $and$ 操作。

可以欽定乙個順序,對區間內操作執行先 $and$ 後 $or$。

那麼$a \ and \ b \ or \ c \ or \ d =a \ and \ b \ or \ (c \ or \ d)$

$a \ and \ b \ or \ c \ and \ d = a \ and \ (b \ and \ d) \ or \ (c \ and \ d)$

然後再維護一下最大值支援查詢就好了。

首先要想到原問題可以用行列式來解決。

因為行列式的定義就是列舉乙個排列,然後貢獻為權值的乘積 $*(-1)^$。

因為有個加法,所以把它提到指數上去,構造乙個多項式就好了。

因為有個 $(-1)^$ 的係數,為了防止被卡需要再給每個多項式隨機乘個係數。

發現最終的答案顯然不超過 $nk$ 次,所以暴力求值插值,複雜度大概是五次方級別的。

然後發現我們只關注 $k$ 的倍數次方處是否有值,也差不多可以轉化為 $k$ 的倍數次方的係數和。

所以可以套個單位根反演上去。

這樣的話只要找出乙個存在 $k$ 次單位根的質數來,然後在這個模質數意義下分別代入 $x=w_k^i$ $0 \leq i < k$ 來求行列式的和。

最終得到的答案就是 $k$ 的倍數次方的係數和。

如果說這個值不為 $0$ ,即一定存在一組合法解,否則大概率無解。

省選模擬50

看到前k大很容易想到類似超級鋼琴那樣的做法。所以問題就轉化成了給定乙個點和乙個區間,求點到這個區間中的點的最遠路徑。這個東西可以用直徑合併簡單的維護出來,也就是用線段樹維護每個區間的直徑。然後用乙個堆來維護當前的最優決策,不斷取出堆頂並且更新即可。看到只有or和and應該就能想到勢能線段樹了,但是考...

省選模擬104 題解

a.簽到題 把每個點向它右側比他大的第乙個點之間連邊,如果沒有那麼向 root 連邊。那麼可以構成一棵樹。特判一些情況之後,可以認為問題就是 1.給某節點和它的所有兒子節點權值加上乙個值。2.詢問一條路徑的權值和。首先考慮如果只詢問單點的維護方法,其實就是打乙個標記表示給整個兒子集合都加上了若干權值...

省選模擬102 題解

a.island 對於正負不同的情況,o n 列舉左側的位置然後計算。對於正負性相同的情況,把笛卡爾樹建出來,然後每次考慮跨過最小值的貢獻。分幾種情況 左右均不超過最小值,左右僅有乙個超過最小值,左右都超過最小值。然後順便統計上其中乙個端點為劃分點的貢獻。然後瘋狂的寫式子拆式子就沒了。做法挺簡單的,...