原创 bzoj4361 isn(樹狀數組優化DP)

要點:一個不合法的狀態一定是由一個長度多1的不下降子序列轉移來的,直接減掉即可。 然後就轉化爲求長度爲i的不下降子序列個數。定義f[i,j]表示以i結尾的,長度爲j的不下降子序列個數,則f[i,j] = sum(f[k,j-1]), k<

原创 [BZOJ2888]資源運輸 (LCT+啓發式合併)

很多個連通塊,每次合併兩個,保證是森林。一個連通塊的代價爲所有節點到該塊的重心距離之和。動態不停連邊,詢問森林中各連通塊代價之和。 這題確實有很多地方都很巧妙,看着claris的題解和程序才寫了出來,漲了不少姿勢。。 首先如果已知每個樹的

原创 ants(插頭DP)

有一個N*N的矩陣,需要用若干循環將其鋪滿,使得每個格子都處於一個循環上,求方案數,逆時針和順時針的循環算作不同的方案。n<=10. 插頭DP,用0表示空,1表示插向輪廓線下側的插頭,2表示插向輪廓線上側的插頭。一共有9種轉移,分類討論即

原创 [BZOJ4259] 殘缺的字符串 (FFT)

題意:定義*號可匹配任意字符。給出A串,B串,求A串在B中完全匹配的所有位置。 將*號視作0,則兩個等長的串可匹配當且僅當Σ(a[i]-b[i])^2*a[i]*b[i]==0。將A串和B串最左邊對齊,每次上式都要重算一次,不科學。所以講

原创 [BZOJ2908] 又是nand (樹鏈刨分)

題意:定義位運算與非:a nand b = not(a and b)。這個運算不滿足交換律,結合律。給出一棵樹,支持詢問0依次nand這條路徑上所有點權得到的結構,或者單點修改。 線段樹上記錄0/1從左往右、從右往左經過這個點的時候會變成

原创 hdu5372 Segment Game (樹狀數組)

題意:每次插入一條線段或刪除之前一條線段,每次操作線段長度遞增,求插入一段線段時有多少線段被它完全覆蓋。 由於保證線段長度遞增,我們可以用右斷點在合法區間內的減去左端點不在合法區間的,可以用樹狀數組分開維護。 下標需要離散化。 下標可以是

原创 數據 (cdq分治)

題意:維護二維平面上的點集,支持插入一個點,查詢點集中的點到指定點的最小、最大曼哈頓距離。不強制在線,n,m<=10w。 考試的時候沒怎麼動腦子,直接上分象限討論+線段樹套平衡樹,花了2h寫了7k結果常數太大隻得了50分。 爲了降低常數,

原创 BZOJ3125city (插頭DP)

題意:就是上一道formula的基礎上限定某些格子只能豎着通過,某些只能橫着通過。 還是括號表示。這個轉移的時候特判一下就好了,具體實現基本和上一題一樣。 #include<cstdio> #include<cstring> #inclu

原创 WC2016醬油記

這次WC2016真有趣啊! 第一課堂講的東西普遍偏難,很難保持跟上思路,於是就當了解來學了。 picks的多項式,太深奧了,接觸到了一些奇葩複雜度的算法。正統的有FFT,NTT,不過不好的是取模比較麻煩。有個karatsuba算法,N^1

原创 ural1519Formula 1 (插頭DP)

題意:n*m的地圖,'*'代表不能走,'.'代表可以走。求哈密頓迴路的數量。n,m<=12. claris講了插頭DP,感覺都差不多聽懂了,但是實現還是有一定困難,花了3個小時才寫出來我的第一篇插頭DP的程序。感覺就是維護一個輪廓線,每一

原创 BZOJ2310 parkii (插頭DP)

題意:給一個矩陣,讓找一條簡單路徑使路徑和最小。N<=100, M<=8。 如果矩陣全是正數的話枚舉起點終點跑跑費用流就好了,省選的話一定會給這個部分分。 考慮用括號序列的插頭DP,增加一個3號表示起點和終點那種插頭。注意這個1表示左括號

原创 [CQOI2015]任務查詢系統 (可持久化treap)

題意:有n個任務。每個任務描述爲(s,e,p)表示起始、結束時間、優先級。M次詢問,查詢i時刻優先級排前k的任務的優先級之和。如果k超過那個時刻運行任務的總量,輸出那個時刻所以優先級之和。強制在線。 s,e<=10w, p<=1000w,

原创 BZOJ4310 跳蚤(後綴數組+二分答案)

題意:將一個字符串分成不超過K段,使得這K段中,所有子串中字典序最大的最小。即每一段當中取一個最大的子串,再在所有段的最大子串再取一個最大值,讓這個最大值最小。長度10W。 最大值最小,明顯二分,但是亂二分是沒前途的。要對所有本質不同的子

原创 BNUOJ51279 組隊活動(cdq分治&&NTT)

題意:N個人進行組隊,每個隊不超過M人,求方案數模998244353。 這個遞推方程我都沒想到。。枚舉當前這個人所在隊伍剩餘人數j,則f[i]=Σf[i-1-j]*C(i-1, j),把組合數展開後發現是個卷積的形式,但是不能直接NTT,

原创 [hdu4453]looploop [treap/splay]

題意:給定一個循環序列,支持以下操作:區間增加,區間翻轉,單點插入/刪除,移動光標,詢問光標所指的位置的值。 首先一眼看出可以用線性數據結構(平衡樹)來維護。然後這些操作都很基礎。但是要注意光標怎麼處理。可以維護一個k記錄它指向第幾個,但