看到前k大很容易想到類似超級鋼琴那樣的做法。
所以問題就轉化成了給定乙個點和乙個區間,求點到這個區間中的點的最遠路徑。這個東西可以用直徑合併簡單的維護出來,也就是用線段樹維護每個區間的直徑。
然後用乙個堆來維護當前的最優決策,不斷取出堆頂並且更新即可。
看到只有or和and應該就能想到勢能線段樹了,但是考場上一直不知道怎麼維護這個標記,然後就死掉了。
實際上還是維護標記的套路,也就是強制先下傳and再下傳or,然後考慮每次操作對於標記的影響就可以了。
然後對於每次操作,假如當前修改的操作對於整個區間的貢獻是相同的,那麼可以直接打標記,因為此時可以知道新的最值。
否則暴力向下遞迴到需要修改的節點。
根據勢能分析可以知道複雜度是正確的。
列舉排列的題可以想一想行列式。
因為行列式的加法比較難搞所以提到指數上,這樣就構造了乙個多項式。為了防止被卡,可以給係數乘上乙個隨機數。
然後發現我們只關注k的倍數處的係數,所以考慮搞個單位根反演。
然後將各個單位根代進去,將行列式相加,就可以得到k的倍數處的係數。
然後判斷這個係數是不是0即可。
省選模擬50 題解
超級鋼琴 異或粽子 異或之幾道題都是這個套路。對於每個右端點不斷找區間最優解,然後把原區間分割為兩個區間。用乙個堆來時刻找到最大值。所以這個題要解決的就是乙個點和區間內所有點的最大距離。點集合並的問題,直接搞乙個線段樹維護直徑就好了。考慮位運算的一些性質,可以按位考慮。對於每一位而言,如果區間不同,...
考試 省選50
好可惡卡常卡死我了。t1我們點分治。對於每乙個位置按照到點分中心的所有子樹節點劃分不同路徑。二分答案 最小的使得大於其的路徑個數為k的長度 只需要給點分資料排序。雙指標掃一掃再加乙個求有多少個大於等於當前二分長度的路徑。輸出答案即可。t2維護乙個線段樹。維護區間與綴和,或綴和。考慮判斷當前區間 an...
省選模擬 19 09 11
ps.博主趁資訊課摸魚考的暴零模擬 看門人憑感覺就知道是長鏈剖分,將路徑查分一下,dis u di sv 2 dis lc adis u dis v 2 dis disu disv 2 disl ca 維護fu,if fu,i 表示u的子樹,深度為 i 的點的 dis disdi s最大值 考慮如何...