主要放一些常見的套路。數組
線段樹/ST表/樹剖/二進制/先後綴優化連邊。優化
樹剖優化連邊就是對每一個重鏈開鏈長個節點,表示前綴連邊。這樣就能夠logn作到鏈上連邊。spa
線段樹區間取模/與/或/開根。blog
就是直接打標記。主要是複雜度分析。排序
斷環成鏈。二進制
以後能夠枚舉端點的開始狀態或者複製兩倍長。gc
根號數據分治/時間(操做)分治。im
求兩個集合之間的信息時,按照集合大小根號分塊。d3
給區間排序統計
能夠按照左右端點,長度,中點。
區間DP
能夠增長一維表示在左邊加上某些東西。能夠用0/1表示成爲可以合併到l - 1/r + 1位置狀態的代價。
數顏色相關
在幾個之中出現能夠等價於有多少種顏色。
序列上能夠考慮莫隊/two points(後綴數組經常使用)。子樹裏就建虛樹,每一個節點求出應該給該顏色減多少。自底向上統計。
位運算
看到位運算就想到拆位。隨意異或線性基,只能異或一次就是01trie。
點邊轉化
構造/隨機一個解以後調整。
(樹上的)二維限制能夠轉化爲平面上的區間。
樹鏈的交/並集。
能夠轉化爲DFS序,對應到平面上的矩形。或者按DFS序排序,減去lca的貢獻。
DP
能夠按照連續段DP/按照大小順序加入DP(波浪),關於基準點DP(要求必須通過(恰)一次該點的方案),不斷減去會算重的轉移以保證前綴正確性。
一個計數trick
上式的意義是在大小爲n的無限重集中選出k排列。故要求下式右邊時能夠用下式左邊。
生成樹權值考慮矩陣樹定理和prufer序列(每一個點出現次數爲度數 - 1)。
小實數大量相乘的時候能夠取對數轉成相加。
遇到絕對值,要麼就按照大小來消去,要麼就全部狀況暴力取最值。
遇到兩棵樹,距離相關問題的時候,考慮邊分治 + 虛樹。
計算全部1~n的權值和的時候,能夠計算全部 > i的狀況數。這樣一個方案被計算次數剛好是它的貢獻。
莫比烏斯反演:
遇到兩個求和符號的時候能夠嘗試交換它們的順序。
式子中有gcd的時候能夠嘗試枚舉一個數做爲gcd。
式子中有[x = 1]的時候能夠嘗試用∑i|xμ(i)來替換。(μ * 1 = ι)