聯賽題目研究

2022-06-03 09:42:08 字數 3441 閱讀 6081

基礎卷積練習題

看上去\(\max\)的限制不好處理。

但是題目中\(a,b\)都特別小。

考慮列舉\(a,b\)的值為\(x,y\),新建兩個陣列\(c,d\),當\(a_i=x,b_i=y\),\(c_i,d_i\)賦值為\(1\)。

把\(c,d\)作or卷積,\(>0\)的部分對\(f(x,y)\)取\(\max\)貢獻到答案。

時間複雜度\(o(2^nn^3)\)。

或者把fwt的域擴充套件一下。就像在一些題目中,拓展行列式的域求多項式一樣。使用乙個長度為\(m\)的向量儲存結果。

時間複雜度\(o(2^nn^2)\)。

小ω的樹

由於題目沒有修改邊權,考慮kruskal重構樹。

考慮每條邊的貢獻,由於點權非負,顯然要選擇盡可能多的點。

欽定一條邊產生貢獻,能選擇的點是這條邊對應子樹的點。顯然選擇整顆子樹更優。

現在,我們要支援修改。

也就是對樹上的一條鏈的權值作加法。

鏈的情況是個經典問題。就是cf1178g的\(n\sqrt\log_2n\)演算法。

樹的情況考慮輕-重鏈剖分。

把每條重鏈分塊套用cf1178g的演算法。

看上去時間複雜度會多log。

然而由於每條重鏈的長度\(\leq\)鏈頂子樹的大小。

假設子樹的大小為\(s\)。

由於輕兒子的子樹大小\(\leq \cfrac\),所以修改的時間複雜度不會超過\(\sqrt\log_2n+\sqrt}\log_2n+\sqrt}\log_2n....=\sqrt\log_2n\)

所以這樣子的時間複雜度還是\(o((n+q)\sqrt\log_2n)\)的,十分神奇。

實際上,可以套用ynoi某題的可加負數做法做到\(o((n+q)\sqrt)\),但是沒有必要。

方格問題

殭屍注意到每個殭屍占領的肯定是乙個連通塊。(kruskal重構樹上的乙個子樹)

並且在乙個連通塊內,能力值大的殭屍的連通塊肯定包含能力值小的殭屍的連通塊。

這給了我們一些啟示。

設\(f_\)表示\(x\)所在連通塊中能力值最大殭屍為\(x\)。

如果能力值最大的殭屍多於\(1\)個,則欽定編號最大的殭屍能力值最大。

考慮從子樹\(y\)的\(f_\)轉移到當前點。

考慮:1.\(x\)和\(y\)在乙個連通塊內。

則\(i=j\)

\(f_*\)(殭屍\(x\)經過\(i\to j\)的方案數)\(\to f_\)。

2.\(x\)和\(y\)不在乙個連通塊內

2.1 \(j>i\)

則殭屍\(y\)必須不能進入\(x\)。

實際上,如果上面的條件滿足,則也蘊含了殭屍\(x\)不能進入到\(y\)這個限制。

\(f_*\)(殭屍\(y\)不經過經過\(i\to j\)的方案數)\(\to f_\)。

並且保證\(y\)中存在\(j\),不存在\(i\),這是因為\(y\to x\)的邊被斷開。

2.2 \(j同理可得

\(f_*\)(殭屍\(x\)不經過經過\(i\to j\)的方案數)\(\to f_\)。

初值是\(f_\)=[\(x>=i\)處最大的殭屍能力值]

注意字首和優化。

f由於其他求逆序對的做法不適合,考慮創造乙個新的求逆序對的做法。

考慮按位分治的套路。設\(solve(s,i)\)表示處理到\(s\)集合的第\(i\)位貢獻的逆序對的個數。

考慮按順序掃瞄\(s\)中的元素。然後問題轉換成對\(0/1\)序列求逆序對。可以儲存前面\(0/1\)個數解決。

設\(a_i\)表示第\(i\)位貢獻的順序對的個數,\(b_i\)表示第\(i\)位貢獻的逆序對個數。

注意到對乙個位進行\(xor\),等於把乙個位置的貢獻從\(a\)變成\(b\)。

所以題目要我們求出的就是若干個元素\(c_i\),每個可以取值為\(a_i\)或者\(b_i\),詢問取值的和排序後的第\(x\)個元素。

由於位數較少,考慮折半。

考慮二分第\(k\)位的值\(md\),顯然把左/右邊的所有情況排序,維護乙個指標就能求出\(\leq k\)的情況的個數。

對於第二問,求出值\(\leq md-1\)的數的個數,然後把\(p\)減去這個數。

然後我們要求的就是逆序對\(=md\)的值從小到大的第\(p\)位。

這同樣可以折半。

把左邊的值按照\(x\)從小到大排序,在右邊求出值等於某個數的數的個數,可以倍增/二分求出。

這樣子就成功求出了答案。

融入社會的計畫

考慮簡單dp,設\(f_\)表示考慮前\(x\)個位置,第\(x\)個位置改成\(i\)。

則\(f_+x-a_\to f_,l-j\leq x\leq r-j\)。

對\(f\)打表/分析/猜結論可以得到\(0\leq f_-f_\leq 1\)

考慮歸納證明,在第一步,隨著\(j\)的增大,乙個點能夠轉移到的區間的左右端點都會向左移動。

能夠轉移到\(x\)的\(j\)滿足\(l-x\leq j\leq r-x\),就是\(f_\)

考慮\(f_-f_=f_-f_+x-a_-(x-1-a_)=f_-f_+1\)

基礎fake練習題

考慮題目的線性規劃。

雖然題目有\(0\leq x\leq 1\)的限制,但是可以把它拆成\(0 \leq x\)和\(x\leq 1\)的兩個限制。

寫出這個線性規劃的對偶形式

得到如下問題:

1.刪除乙個路徑,代價為\(1\)

2.刪掉覆蓋第\(i\)個點的所有路徑,代價為\(c_i\)。

考慮dp。設\(f_\)表示第\(i\)個點,子樹中未被刪除的路徑的較淺點深度\(\leq j\)的最小代價。

假設根節點的深度是\(1\),顯然答案是\(f_\)。

顯然這個函式是常值分段函式,且隨著\(j\)的增加而增加。

用線段樹維護差分表。

顯然當堆的大小\(>c_i\)時,刪掉覆蓋第\(i\)個點的路徑更優。

所以我們每次刪除較淺點較淺的路徑即可。

god knows

悶聲刷大題

gdkoi2018 還唸

城市建設

顯然有線段樹分治+lct做法,但是並不是正解。

對詢問進行分治。

注意到當前區間\([l,r]\)的邊都是未被確定的,所以我們考

慮使用詢問外的邊更新當前的答案。

考慮從當前區間轉移到子區間。

把當前子區間內的所有邊的邊權設為\(-\inf\)然後和當前詢問外縮過的mst一起做mst。

則顯然權值不是\(-\inf\)且在當前mst的邊一定會被選擇。

可以把這些邊縮成乙個點。

把當前子區間內的所有邊的邊權設為\(\inf\)然後和當前詢問外縮過的mst一起做mst。

則顯然權值不是\(\inf\)且不在當前mst的邊一定不會被選擇。

可以刪除這些邊。

使用可撤銷並查集維護。每做完乙個區間就把它的修改全部撤銷。

並不會證明時間複雜度。

黑箱

聯賽聯考3

策略總結 這次策略有明顯問題。對於程式的檢測沒有積極性,於是掛的很慘 d1 t1,咋一看好像很水,直接按第一印象5分鐘寫了出來。過了樣例也沒想去拍,其實連思路都是錯的。t2感覺狀態有點模糊,直接去t3了。t3想出了5維狀態,結果腦子抽了用記憶化搜尋實現,n 5不能直接開出陣列。於是用map記憶化,結...

多校聯賽總結

首先是一些資料 2014 multi university training contest 1 by fzu a 數學 費馬小定理 b 網路流 最小k路徑覆蓋 c 樹形dp 樹的重心 資料結構 d 貪心 巧妙 e 數學 dp 隱含馬爾科夫模型 f 線段樹 函式式 二分 g 線段樹 狀態壓縮 h 模...

多校聯賽 Envy

我們讓 n 個人站成一排,編號為 1 n,每個人都有乙個數字代表他這次比賽的成績,對於每個人,如果他後面 編號大於他的人中 存在乙個人的成績大於等於他,那麼他的嫉妒值為他們之間的距離。兩個點 a和 b 之間的距離為 abs a b 例如 4,3,6,2 那麼第 1 個人對第 3 個人有 2 點嫉妒值...