原创 裝箱Bin Packing

//紫書P253 裝箱 //Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #inclu

原创 數據結構入門9—虛樹

原本以爲K-D Tree比虛樹難,但是後來發現虛樹反而難理解一些。主要是關於找LCA的問題。 假如我們有一些點是一定要在虛樹裏的,那麼需要保證他們任意兩點的LCA也在虛樹裏,否則樹的結構就改變了。 那麼就需要用到dfs序了。 我們求得每個

原创 最基礎模板複習(持續更新)

快速排序(不知道有什麼用) void qsort(int l,int r) { int i=l,j=r,mid=a[(l+r)>>1]; do { while(a[i]<mid) i++;

原创 博客已移到http://www.cnblogs.com/Serene-shixinyi/

由於新版的csdn太醜,決定將此博客廢除。 移至http://www.cnblogs.com/Serene-shixinyi/

原创 初學manacher

求最長迴文子串的有力工具。 按照一般的暴力判斷方法,我們可以枚舉每一箇中點,然後從這個位置暴力向兩邊拓展。 但是實際上我們可以重複利用已經求得的信息,使期望複雜度接近O(n)。 我們設 rad[ i ] 表示以i爲中心的迴文串的長度的一半

原创 數據結構入門7—左偏樹

一種可並堆,具有左偏性質。每個點有一個距離。 距離則是如下定義的:  節點i稱爲外節點(externalnode),當且僅當節點i的左子樹或右子樹爲空( left(i) = NULL或right(i) = NULL );節點i的距離(di

原创 初學後綴數組

後綴數組就是把一個字符串的後綴排序,然後就可以再亂搞一些東東。 DC3看着就累,還是倍增好。 當初看代碼覺得雖然不長但是理解起來並不容易,各種數組有各自的意義很容易搞混。 特別是要理解基數排序。每次按第二關鍵字排序再按第一關鍵字排序,可以

原创 數據結構入門8—K-D Tree

k-d樹是一種分割k維數據空間的數據結構。主要應用於多維空間關鍵數據的搜索(如:範圍搜索和最近鄰搜索)。K-D樹是二進制空間分割樹的特殊的情況。 以上來自百度百科。 其實就是一顆二叉樹,用於處理多維空間問題,假如有三維,這棵樹在第一層以x

原创 數據結構入門5—分塊

發現分塊真的是一個好東西,就是優化過後的暴力啊。 當修改的時間複雜度爲O(n)而查詢複雜度爲O(1)或修改O(1)查詢O(n)時用分塊就可以轉化爲修改查詢都是O(sqrt(n))的。 雖然比log n要差一些,但是分塊真的很好寫啊。。 比

原创 數據結構入門6—文藝平衡樹(Splay)

早就聽說 Splay 就是不管幹什麼都Splay一下就可以了,但是聽說傻可開腦洞打代碼打了250行,驚恐。 於是先學treap結果沒想到一調試就搞了三個月。但是其實寫過treap再學Splay就相對容易一些了。 那就先學只有區間翻轉的文藝

原创 數據結構入門4—權值線段樹

一開始還以爲是什麼高級東東。 就是一個線段樹,只不過下標是代表數字的值。 來看一個經典問題(來自http://blog.csdn.net/loi__dijiang/article/details/49449375) 題目描述 Des

原创 數據結構入門3—莫隊算法

分治一類的算法大多只能在離線時使用。莫隊算法就是只能在離線下用。 先看一道模板題:小Z的襪子 Description 作爲一個生活散漫的人,小Z每天早上都要耗費很久從一堆五顏六色的襪子中找出一雙來穿。終於有一天,小Z再也無法忍受這惱人

原创 數據結構入門1—Treap

debug3個月把洛谷刷屏,終於過了。。。。(一開始寫了兩百行,後來看了大孫代碼才搞點小技巧改短了些) treap,樹堆,是指有一個隨機附加域滿足堆的性質的二叉搜索樹,其結構相當於以隨機數據插入的二叉搜索樹。其基本操作的期望時間複雜度爲O

原创 斜率優化

幾個月前剛開始被拉去和高二一起學這個東西,感覺好高大上啊。。。 然後前幾天碰到一道,覺得似乎可以理解一些了(其實是因爲我的草稿本終於可以派上用場了),於是就下定決心要學了。 其實蠻好理解的。假如給你一條直線y=kx+b,告訴你k,還有一些

原创 數據結構入門2—主席樹

聽說劃分樹能解決的問題主席樹基本都能解決,感覺主席樹好理解又好寫(至少比那些亂七八糟的平衡樹親切多了),乾脆就不學劃分樹了qaq %%%lljakfather所有題都是主席樹模板題 其實就是可持久化線段樹啦。 假如一個序列有n個數,有m次