之前做一道要用到splay的問題,因為並不會splay(同時懶得學習),所以就試圖在論壇找找有沒有偷懶的辦法,沒想到真的讓我找到了,那就是rope這個結構,這個東西聽說比較新,所以如果特別老的oj(比如poj和hdu)我覺得可能懸,不過dev(前提是新版的,不是機房那種)和牛客這些應該都可以支援。這個東西非常的方便,這裡先留下乙個坑(有興趣的可以自己去查一查,相當於速成splay),之後研究了之後再慢慢補。
當我們說到陣列時我們會說他的查詢是o(1)的,當我們說到鍊錶時,我們會說它的插入和區間轉移是o(1)的,然而我們一直都有乙個夢想,就是擁有乙個能夠兼具鍊錶和陣列優點的資料結構,雖然我們並不能找到嚴格o(1)的結構,但是logn的還是有的(比如splay),而rope理論上是乙個塊狀陣列,所以他的複雜度是n根號n,能夠這個複雜度經過一些優化其實已經足夠應付大部分問題了。下面舉幾個例子
先放乙個**
說的是這樣乙個問題,有乙個排列,初始為1至n,進行q次操作,每次將l到r的排列轉移到最前面(類似於切牌),問最後的排列
# include
# include
using namespace __gnu_cxx;
const int max_n = 1e5;
int main()
for(i = 0 ; i < n ; i++)
printf("%d ", t[i]);
return
0;}
rope區間reverse的問題也可以解決,當然你可能會說這不是splay板子題嗎,但我們是要偷懶,所以這個時候維護兩個rope即可,這兩個rope互為revserse,這樣要是轉移哪個區間就交換他們當前部分的區間即可。 破爛集 輸入問題
說實話這個問題之前一直沒有意識到,後來才發現這門學問是如此高深,本著精益求精的態度,有些時間空間的高度優化還是必要的,有時候可能就跟爐石里的伏筆似的,所以即使在做最簡單的問題的時候其實也能有一些不錯的想法。由於這個問題十分高深,所以我也沒有辦法絕對說明,也是慢慢研究中的,但我會不斷更新,把我所有的研...
破爛集 大佬的spfa
估計所有人在看過spfa之後基本都會把其他最短路的演算法忘光吧,因為spfa不但超級簡單,而且還超級塊,所以的確非常好用,之前看到乙個大佬的spfa,感覺有幾個不錯的優化,用了之後把我1202的乙個85ms左右的演算法直接優化到65ms了,還是很給力的,所以在這裡貼一下,主要在於用deque代替qu...
STL 集和多集(set multiset)
與基本容器相比,關聯容器更注重快速和高效地檢索資料的能力。這些容器是根據鍵值 key 來檢索資料的,鍵可以是值也可以是容器中的某一成員。這一類中的成員在初始化後都是按一定順序排好序的。set和multiset 容器類 集和多集 include 內部它實現 紅黑樹 插入刪除查詢複雜度log n 其中所...