原创 分治 FFT 模板的三種過法

生成函數做法 \[\begin{align} f[i] &= \sum_{j=1}^i f[i-j]g[j] \\ f[i] & =\sum_{j=0}^{i-1}f[(i-1)-j]g[j+1] \end{align} \]把 g 整體左

原创 Graham 求靜態凸包

首先確定一個一定在凸包裏的點 base, 比如 y 座標最小的點。 然後用一個射線按照某種方式轉一圈, 每一時刻只保留最外的點 x, 上一個加入凸包的點 y, 上上個 z, 顯然 (z,y) 轉到 (y,x) 需要 δ 的方向必須與原來射線

原创 exp 初探

貝爾數--ex 定義貝爾數 wn, 表示把 n 個有區別的球放到若干個無區別的盒子裏的方案數, 也就是把集合 {1,...,n} 劃分成若干 (1 ... n) 個不相交非空子集的方案數。 遞推式, 考慮枚舉 1 所在的子集的大小, 即:

原创 基本的普通生成函數

\[\begin{align} aF(z) + bG(z) &= \sum_n (af_n+bg_n)z^n \\ z^mG(z) &= \sum_n g_{n-m}z^n, \quad m\ge 0 \\ \frac{G(z) - g_0

原创 多項式 ln

知識前備 首先有複合函數的求導公式:G(x) = F(A(x)) → G'(x) = F'(A(x))A'(x)。 ln 函數的導數: \[\ln'(x) = \lim_{\delta \to 0} \frac{\ln(x+\delta)

原创 HAOI2018 染色

設 G[k] 表示恰好出現 S 次的顏色恰好有 k 種, 數值爲方案總數。設 n = min(M, floor(N/S)), 這道題的答案就是 Σ1≤i≤n Wi × G[i]。 設 F[k] 表示恰好出現 S 次的顏色至少有 k 種, 數

原创 FFT/NTT

完全抄襲自 OI-wiki 基本 通俗地說, 係數表達 → 點值表達, 稱爲 DFT, 點值表達 → 係數表達, 稱爲 IDFT。 FFT 通過取某些特殊的 x 的點值來加速 DFT 和 IDFT。 考慮點值表示下的多項式乘法: \[f(

原创 動態逆序對

帶修改, 維護全局逆序對數。 翻譯成另一種風格: 有 n 個點, 每個點兩個屬性 ai,bi, 每次修改一個點的 bi, 維護全局有多少個點對滿足 ai<aj && bi>bj。 將修改換成先刪除後插入, 逆序對的變動就看得很清楚了, 總體

原创 JSOI2009 計數問題

把題面改下風格: 有 n*m 個點, 每個點 i 有權值 xi,yi,zi, 要求回答 q 次詢問, 每次給定 l1, r1,l2, r2,l3,查詢有多少點滿足: l1 ≤ xi ≤ r1 l2 ≤ yi ≤ r2 l3 =

原创 AHOI2013 作業

第一問就是主席樹了。 依據套路, 對於每個數 x, 記錄上一次出現的位置 prex, 於是問題就變成了: 查詢區間 [l,r] 內, 值域 [a,b] 內, pre [0,l-1] 內的數, 是個三維的偏序問題。 看上去一般做法要 O(lo

原创 Luogu P2839 [國家集訓隊]middle

首先 [b,c] 是必選的, 然後選一段 [a,b) 的後綴和一段 (c,d] 的前綴(都可空)。 對於中位數(這裏中位數採用這道題的定義)有個常見的處理方式: 二分 mid, 將 <mid 的設爲 -1, 其餘設爲 1, 求總和, 若總和

原创 苟隨筆

可持久化線段樹, 常用用法是: T0.ins = T1, T1.ins = T2,……, Tk.ins = Tk+1 …… 即可以對操作序列的前綴生成的線段樹隨機訪問。 但是根據定義, 即在隨便一個版本上生成一個新的版本, 可以對操作樹的前

原创 輕量樹上問題選做

輕量的樹上問題。 NOIP2013 貨車運輸 首先有結論:一張無向圖上兩點之間的最優的瓶頸路是最值生成樹上的兩點之間的路。 於是就可以最大生成樹+鏈最值做, 只考慮碼量就倍增就可以了。 #include <bits/stdc++.h> u

原创 sb的斜率優化筆記

參考資料 [HNOI2008]玩具裝箱 設 S[i] = Σ1≤i≤n (C[i] + 1), 設狀態 dp[i] 表示裝好前 i 個, 值爲最小花費, 則轉移爲: dp[i] = min0≤j<i {dp[j] + (S[i]-S[j

原创 [清華集訓2012]串珠子

這個模型見過好幾次了, 似乎很經典,就是一些點集形成的任意非連通圖都可以表示爲一個連通塊和其它若干聯通塊。 #include <bits/stdc++.h> const int mo = 1e9 + 7; int g[17][17],