//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 的陣列,支援如下幾種操作 在某個歷史版本上修改某乙個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作 對於操...