這時候,我們就需要一種新的資料結構:主席樹(別問我為什麼叫主席樹,去問主席)。
由於之前寫了半天的消失了,那我就寫個簡潔點的。
為了儲存線段樹的歷史版本,我們可以每修改一次就複製整棵線段樹。
但是這樣做空間和時間都承受不下,然後我們會發現每一次修改事實上只影響了一部分節點。
那麼我們對於每次修改,就可以只複製一遍影響到的節點並且進行修改,其他的節點共用。
每次都會新建乙個根,記錄每個版本的線段樹的根節點位址就可以找到這個版本。
如圖:
圖就建成這樣,然後要訪問歷史版本的時候找到那個根就好了。
最終對於乙個有n個數的序列,會建立n棵共用部分節點的線段樹,編號為i的樹中有序列中前i個數的資訊。
那麼假如要詢問乙個區間的某些資訊,只要用字首和的思想兩端相減即可得到(權值線段樹)。
//洛谷p3834主席樹模板的**int build(int l,int r)//最開始的表示前0個數的線段樹
int insert(int pre,int l,int r,int x)//這裡使用權值線段樹,在前一棵線段樹的基礎上插入乙個x
int query(int u,int v,int l,int r,int k){
if(l>=r)return l;
int cnt=sum[lch[v]]-sum[lch[u]];
if(cnt總結一下,這個資料結構就是靠指標來維持,主要思想就是只複製並修改一次操作影響到的的節點。
對於其他節點和指標,都不進行修改,不同版本之間可能會共用一些節點,從而減少時空複雜度。
Visual Unit 簡明教程
visual unit,簡稱vu,是新一代單元測試工具,功能強大,使用簡單,完全視覺化,不需編寫測試 vu的測試結果使程式行為一目了然,有助於整理程式設計思路,提高程式設計效率和正確性,並能快速排錯 vu還增強偵錯程式功能 如自由後退 用例切換 提高除錯的效率 vu能達到空前的測試完整性,輕鬆完成語...
MYSQL簡明教程
dos進入mysql命令 c mysql h 127.0.0.1 u root p enter password mysql 進入完成 建立資料庫 create database databasename 使用指定資料庫進行操作 方法1 use database databasename 方法2 m...
Struts Hibernate簡明教程
jboss 資助的開源專案,當前比較流行的持久層框架,是一種先進的 jdbc 封裝框架。優點 提高了資料訪問層的開發效率,使我們不必直接呼叫 jdbc 來訪問關係型資料庫。hibernate 建立在物件導向的基礎之上,開發人員只需針對物件進行操作,不必再關心資料庫的連線關閉,sql的執行,以及 re...