DS(数据结构)复习

這裏全是一些基礎的數據結構小練習。
在搞社團節沒什麼時間搞新科技(人太弱了。你看大爺們天天糖果公園,各種分塊。

這裏都是一些水題。

鏈表

[BZOJ 1588] 挺喜歡用鏈表的。方便。

spaly

lazy思想
[BZOJ 1014] 字符串hash+splay
[BZOJ 3786] dfs序+splay
[BZOJ 1588] …
[BZOJ 2329] 額。內心是崩潰的。寫了一晚上。我沒救了。注意各種標記的下傳就好。感覺還是貢獻一份代碼和mkdt咯。個人習慣用OCR去蓋掉之前的所有操作。
「COCI 2011 upit」 注意標記的下傳。

[GSS6] 裸的splay注意卡常數,不要寫class..

[HDU 1890]看懂題之後直接splay..(無名WA了一晚的腦殘的我。

「TASUFFIX」沒什麼難度的題。區間的切割翻轉啥的是splay的裸題。強套了一個已知後綴數組求字符串數,其中離散化後一樣的不算不同本質方案。然後就變成一個喜聞樂見的數等號問題。根據SA的性質可以列出形如 Str[Ai+1]<Str[Ai+1+1] 然後其他地方隨便取。注意這裏的splay需要支持區間分裂。初始是 [1,n] 的一個大節點。

區間樹

還是注意lazy思想,和一些比較常見的處理技巧。
[hdu 3971] 離散化

treap

常數小。

SBT

trie

注意一些經典思路

heap

額。主要用途還是堆貪心和dij

Fewick tree

[HDU3333] 离线处理。利用标记该数上一次出现的位置进行去重。
[SPOJ DQUERY] 同上。在线版本在另一题中。
这两个代码没什么区别,只给一个好了。

嵌套數據結構

嵌套思路千變萬化。
[Uva 12345/BZOJ 2120] 我可以说我是看着题号进来玩的么。其实是DQUERY的在线版本,并加入了修改操作。考虑的做法就是把之前的树状数组改成动态建点的线段树,然后在外层套一个树状数组维护每一个前缀操作和。至于每一次修改要考虑一下上一个与它相等的数和下一个与他相等的数的位置。时间复杂度是 O(nlog2n) ,空间复杂度是 O((N+M)logn) 其中M为操作次数。N为序列长度。
0.5s代码
[SPOJ XXXXXXXX]额,HDU3333的带修改版。和上面那个一模一样。

樹上莫隊

會排序麼?
會莫隊麼?
會BZOj1086麼?
會暴力麼?
行。這樣就會樹上莫隊了。。
什麼?不會糖果公園?三關鍵字排序。
還不會?業界良心VFK的題解你值得一看。
一個好口胡但是口胡難度與實現難度成反比的東西。(現在我認爲是正比了。
[BZOJ 1086]
[SPOJ COT2]
額。雖然我不是跑到了rank1的owaski大爺,但是我從3.42卡到2.14

id Time MEM
16022273 2.14 11M
16019804 2.48 11M
16019783 2.50 11M
16019783 3.42 11M

還是有點策略的。
1.優化一:最大的優化,3.42->2.50 我們考慮排序前,把端點小的放在前面優先考慮。
2.優化二:2.50->2.48 額。。其實沒啥,就是到處加幾個寄存器。
3.優化三:就在我覺得不能優化的時候。回去寫糖果公園的時候,發現可以減少兩次求lca,然後求lca的次數可以化爲對於每一對詢問值求一次。2.48->2.14 這個優化還是蠻大的。
4.優化四:採用鏈剖求LCA。

大體上就這麼多優化。貼一份我2.14的代碼。

「WC2013」糖果公園。
帶修改的樹上莫隊。
挺好寫的,注意到我們需要把時間算作第三個關鍵字。這樣才能保證複雜度。
一個保證複雜度的分塊大小是 BLOCK=N23 ,然而這題,推薦的玄學塊大小是1500!沒錯就是1500!
一般來說,你會1A。不要到處卡評測機。或者深夜刷題。複雜度是 O(n53) ,玄學複雜度是在此基礎上乘上一個 0.8 左右的常數。這個因人而定吧。

你可能感兴趣的:(OI,知识点,树链剖分)