原创 POJ-3693--後綴數組求字典序最小重複次數最多子串

摘自2009年國家集訓隊羅穗騫論文《後綴數組-處理字符串的有力工具》 因此我們只需處理出原串正反兩個版本的後綴數組,然後用rmq問題的處理方法求LCP,我的處理方法是讓關鍵點包含在r中,如果想包含在l中,只需把向前向後擴展的位置稍作處理

原创 BZOJ 1146 [CTSC2008]網絡管理Network

題意:給一棵樹點有點權,要求支持 1.更改點權 2.詢問鏈上第k大 n,m<=80000 Sol: 並不能算Solution,因爲我沒過.... 先樹鏈剖分一發,詢問變成給定log個不相交區間,詢問區間並的第k大帶單點修改 區間第k大用主

原创 乘法逆元模板

我們知道,在模意義下,加減乘運算是封閉的; 例如在模17意義下,8+11=((8%17)+(11%17))%17=2,19+21=((19%17)+(21%17))=6; 減法同理,但是在C++編譯器中取模的意義是與數學上不同的,負數mo

原创 李超線段樹

現在要求你在線動態維護一個二維平面直角座標系,支持插入一條線段,詢問與直線x=x0相交的所有線段中交點y的最大/最小值 --李超線段樹解決的問題 現在我們只考慮詢問最大,事實上最小是同理的 線段樹維護覆蓋這個區間的"最優勢線段","最優勢

原创 BZOJ4596 黑暗前的幻想鄉 Matrix_Tree定理 容斥原理

題意:n個點的圖其中每條邊都有顏色且共有n-1種顏色,求一個生成樹滿足每種顏色的邊出現且僅出現一次 Sol: 容斥全靠猜系列 答案=所有邊生成樹個數-少一種顏色生成樹個數+少兩個... 生成樹個數用矩陣樹定理算一下,注意符號 Code:

原创 POI2005 泛做

快NOIP了...最近又感覺無所事事...做點題寫寫總結找找狀態= = 只做了BZOJ上那些AC人數較多的題 (沒幾個人過的題不敢看 -------------------------------------分隔線------------

原创 BZOJ3122 [Sdoi2013]隨機數生成器 數論

題意:對於遞推式X_{i}=(a*X_{i-1}+b)%p | X_{1}=c 求最小的n滿足X_{n}=t 其中a,b,c,t,p爲給定非負整數且p爲質數,0<=a<=p-1,0<=b<=p-1,2<=p<=10^9 Sol: 把遞推式

原创 Codeforces835E 二進制亂搞

題意:n個元素中有兩個是特別的,"不特別的"元素都是x,"特別的"都是y,且x≠y,現在你可以最多詢問最多19次找到特別的元素的位置 詢問可以詢問一個子集元素的異或和,n<=1000,ai<=1e9 Sol: 第一次見到這種題呢,長見識了

原创 BZOJ3676 [Apio2014]迴文串 Manacher+後綴數據結構

題意:一個子串的價值被定義爲長度*出現次數,求價值最大的迴文子串 Sol: 首先本質不同的迴文子串個數是O(n)級別的,可以用Manacher求出 然後就是要求一個子串的出現次數 可以用後綴數組+二分求,也可以用後綴自動機 定位到子串所屬

原创 BZOJ2013 [Ceoi2010]A huge tower 亂搞

題意:n塊磚各有寬度,A在B的上邊當且僅當A不比B的寬度+D長,求放在一起方案數 Sol: 先排序,考慮從小到大一個個插入 因爲當前插入的一定最大,比她小的一定能在它上面,只需考慮她能放在誰上面 顯然可以放在底下,此外還有一段連續區間可以

原创 BZOJ 3924: [Zjoi2015]幻想鄉戰略遊戲

題意:動態維護支持修改點權的樹上帶權重心 Sol: 看見東方就點進來了233 膜拜下陳老師出的題 首先考慮如何求一個點到樹上其他點的帶權距離和,動態點分治可以做到單次O(logn) 現在考慮暴力,發現如果求出了每個點到其他點的帶權距離和記

原创 Coci2015泛做

最近比較頹廢,寫點題練練智商... 感覺自己還是太弱了 進入正題 BZOJ3743 [Coci2015]Kamp  題意:一棵樹有邊權,有k個關鍵點,求在每個點出發遍歷每個關鍵點一次的最小邊權和 Sol:對於一個點,ans_i=以i爲根的

原创 BZOJ4516 [Sdoi2016]生成魔咒 後綴自動機/後綴數組

題意:一個串初始爲空,n次像串尾添加元素,每次添加後回答本質不同的子串個數 n<=1e5 字符集大小1e9 Sol: 本質不同的子串個數,考慮後綴數據結構 發現向結尾添加字符對後綴數組不友好,但是在開頭添加很資瓷,相當於新添加一個後綴 於

原创 BZOJ2741 【FOTILE模擬賽】L 可持久化Trie+分塊

題意:給定長度爲n的序列,m次詢問區間最大連續子段異或和 n<=12000, m<=6000 Sol: 首先搞前綴異或和,問題變成詢問區間選兩個數最大異或和 然後考慮暴力 設f[i][j]表示區間i - j 答案 f[i][j]=max(

原创 BZOJ2555 SubString 後綴自動機+LCT

題意:給一個串,支持 1.詢問一個串在當前串中的出現次數 2.在串尾加一個字符串 強制在線 Sol: 如果沒有添加操作,答案就是將給定串在SAM上跑到的最終狀態的Right集合大小(到不了就是0) Right集合大小可用Parent樹算