主席樹簡明教程

2022-05-22 20:57:12 字數 862 閱讀 3703

這時候,我們就需要一種新的資料結構:主席樹(別問我為什麼叫主席樹,去問主席)。

由於之前寫了半天的消失了,那我就寫個簡潔點的。 

為了儲存線段樹的歷史版本,我們可以每修改一次就複製整棵線段樹。

但是這樣做空間和時間都承受不下,然後我們會發現每一次修改事實上只影響了一部分節點。

那麼我們對於每次修改,就可以只複製一遍影響到的節點並且進行修改,其他的節點共用。

每次都會新建乙個根,記錄每個版本的線段樹的根節點位址就可以找到這個版本。

如圖:

圖就建成這樣,然後要訪問歷史版本的時候找到那個根就好了。

最終對於乙個有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...