水平有限,題目太水 or 和分治關係不大 求輕噴 /kk
考慮如何把乙個序列的每乙個區間的集合都求出來。
按權值分治成大小兩個序列,遞迴下去,然後再合併到一起。
需要的操作次數是 \(t(n)=2t()+=n^2\) ,看起來不錯但是過不去。
再對值域分塊,每個塊分別做,詢問的時候把這幾個塊合併到一起。
設塊大小為 \(b\) ,則操作次數為 \(nb+\) ,\(b=\sqrt q\) 時剛好卡過。
題目標籤有分治,所以這題是分治
區間看起來一點性質都沒有,所以把乙個區間用類似線段樹/字典樹的方法分成 \(o(\log w)\) 個區間。
暴力在兩邊各列舉乙個區間,把它們合併起來,最後再把合併出來的區間插入字典樹中,即可做到 \(o(n^2 \log^3 w)\) 的複雜度。
考慮合併出來的區間主要和字首較短的區間有關,因此可以在一邊列舉區間,在另一邊的同層列舉出現過的字首。
由於一層中的字首個數是 \(o(n)\) 的,所以總複雜度 \(o(n^2 \log^2 w)\) 。
顯然一條路徑是乙個一次函式,也可以看做乙個點 \((k,b)\) ,只要能把所有路徑對應的點的凸包建出來就做完了。
考慮點分治,然後合併路徑就是閔可夫斯基和。
然而不能合併同子樹的點,彷彿需要分治求和,感覺很難受?
邊分治即可。
眾所周知在這題的背景裡,乙個連通塊中兩個點的最短路就是任意一條路徑再異或上任意一些環。
路徑可以選一棵生成樹,而把所有由一條非樹邊和對應的樹邊組成的環考慮進去後,任意乙個環都可以被拼湊出來。
所以最大異或和就可以由線性基維護。
有刪邊?線段樹分治即可。
先要看懂題,列舉 \(k=2^u\) 之後轉化為求 長度為 \(n \le maxn\) ,值域在 \([1,maxa/k]\) ,且 \(n\) 為奇數, \(a_n\) 為奇數的遞增序列個數。 然後答案就是
\[\sum_ \sum_^}\rfloor}[i \text ] \sum_^[j \text ]\left(\begin
i-1 \\
j\end\right)
\]這個式子看起來很奇怪,不太會優化。
由於 \(n\) 比較小,所以可以直接設 \(f_\) 表示前 \(i\) 種數,選了 \(j\) 個放進序列裡,最後乙個是奇數/偶數的方案數,然後倍增+ntt即可求解。
求解的過程中把每乙個 \(u\) 都算了一遍,所以複雜度是 \(o(n\log a\log n)\)
動態點分治。
點分樹有乙個性質:任意兩個點在原樹上的路徑也會經過點分樹上的 \(lca\) 。
因此,做詢問的時候可以列舉 \(lca\) ,欽定它在路徑上。如果繞了遠路也不會使答案更優,所以正確性***。
在乙個分治重心就只需要找到編號在某乙個區間的離它最近的點了,用動態開點線段樹即可維護。更好的做法可能是對分治子樹內的點的標號進行離散化,減少常數也降低空間複雜度。
看這裡:
看這裡:
看這裡:
考慮分治。
由於圖的特殊性,刪掉連續 3 個點之後圖就會不連通,所以考慮中間的三個點,則橫跨左右的點對的最短路必然會經過其中乙個。
從這 3 個點分別跑最短路,設左右兩個點的最短路分別為 \((x_1,x_2,x_3),(y_1,y_2,y_3)\) ,那麼貢獻即為 \(\min(x_1+y_1,x_2+y_2,x_3+y_3)\) 。
對三種情況分別計算貢獻,就是乙個普通的二維偏序,用樹狀陣列維護即可。
然後兩邊的貢獻就可以分別做了。
區間變得較小的時候暴力即可。
樹分治亂學
mathrm color 輕鬆切點分治然後還寫了 huge leftarrow orz.神 mathrm color 說 所謂點分治,就是把所有的點分開來治 那麼,什麼是點分治?點分治 就是 澱粉汁 也就是為了勾芡而調配的水澱粉,一種乳白色懸濁液,那麼,一道色香味俱全的糖醋排骨就做好啦 大霧 通過對...