可持久資料結構

2022-03-26 20:35:50 字數 448 閱讀 2343

$o(n*log^n)$

由於很久之前看過這個題,一直以為不是很可做,然而發現一眾大佬全都切掉了,於是好好想了想,發現不是很難。

如果$k_>k$,只需要從右到左再跑一遍即可。

$o(n*logn)$

長時間思考無果後去看了個標籤:切比雪夫距離轉曼哈頓距離?然後就去學習了一下,然後就會了。

首先將題裡的那個東西轉成曼哈頓距離,然後可以發現$x$和$y$的貢獻是分離的,且最優的必然是中位數,維護一下就好了。

樹上鏈的詢問樹剖就行,區間加等差數列打標記就行,查詢歷史版本持久化就行,標記永久化,碼就完了。

考慮求出每個值可以異或的一段區間,那麼只要在$trie$樹上查就可以了。求出這個區間可以利用$st$表+二分,二分出左右比當前數大的第乙個值,再二分第二個值即可。

可持久$trie$模板題,異或字尾和=異或字首和^整個序列,將字首和插入$trie$樹,查一下即可。

可持久化資料結構

1.可持久化線段樹 可持久化陣列 最基礎的可持久化資料結構,每次修改開新的log個點即可。includeusing namespace std const int n 1e6 100 templatevoid rd t x templatevoid print t x struct segseg n...

可持久化資料結構

用vector實現可持久化 這題要求的是乙個支援區間查詢的可持久化資料結構。這裡使用vector巧妙地實現 pair用pair儲存時間戳以及當前時間的值,query的時候使用二分查詢即可。如下 1 include2 include3 include4 include5 define x first ...

可持久化資料結構維護可持久化陣列

首先我們要知道,undo 操作,也就是直接跳回前面的操作 歷史操作 然後跳回的地方到現在的地方這乙個區間的操作都不用管。這就是高階挑戰的思路 可持久化是指一種可以訪問歷史版本的資料結構 然後我們就可以知道,詢問歷史,又是陣列,也就是可持久化陣列。可持久化陣列的維護很簡單,我們可以開乙個 o n 2 ...