模板 可持久化字典樹

2021-09-07 04:13:07 字數 621 閱讀 2370

//

made by xiper

//updata time : 2015 / 12 / 8

//test status: √

//使用前呼叫初始化函式 init() 同時 root[0] = 0;

struct

trie_persistent

tree[triesize];

//獲取字符集雜湊編號 , 必須在 [0 , lettersize) 之內

inline int getletteridx(int c)

//插入字串 str , 上乙個副本是 f

int insert(const

char * str ,int

f)

return

res;

}//在 [l ,r] 副本中查詢字串str

//引數帶入( str , root[l-1] , root[r])

int find(const

char * str , int l ,int

r)

return1;

}void init() //

虛擬節點

}trie;

可持久化字典樹

以每個結點為根,建一顆字典樹 內容為1到i的值 這樣之後,做差後,即為一段區間或是一段路徑。可以發現,如果裸著建,不僅要消耗很多的時間,更是要消耗很多的空間。考慮以i為根的字典樹和以 i 1 為跟的字典樹的異同。可以發現,在當前以i為根的字典樹上減去a i 就是 i 1 的字典樹了。所以,我們可以將...

可持久化樹模板

您需要維護乙個序列,其中需要提供以下操作 插入乙個數到序列的第 t 版本使其成為序列的第 k 項,這個數為 x 刪除序列的第 t 版本的第 k 項 查詢序列的第 t 版本的第 k 項。第 0 個版本為空序列。修改操作不會影響被修改的版本,而總是產生乙個新版本。input 第一行有乙個正整數 n 表示...

模板 可持久化陣列(可持久化線段樹 平衡樹)

update 最後乙個點時間空間已經放大 標題即題意 有了可持久化陣列,便可以實現很多衍生的可持久化功能 例如 可持久化並查集 如題,你需要維護這樣的乙個長度為 n n n 的陣列,支援如下幾種操作 在某個歷史版本上修改某乙個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作 對於操...