POJ 2104 區間第k大 主席樹(模板)

2021-09-12 23:04:00 字數 823 閱讀 8402

查詢區間範圍內,第 k

kk 大的數

按照數列順序依次加入,構建可持久化線段樹(主席樹),由於線段樹的可減性,能夠得到對應區間範圍內的線段樹

主席樹的模板題了

int cnt, root[maxn]

, a[maxn]

;struct nodet[maxn*40]

;vector<

int> v;

intgetid

(int x)

void

update

(int l,

int r,

int&x,

int y,

int pos)

intquery

(int l,

int r,

int x,

int y,

int k)

intmain()

sort

(v.begin()

, v.

end())

; v.

erase

(unique

(v.begin()

, v.

end())

, v.

end())

;rep

(i,1

, n+1)

update(1

, n, root[i]

, root[i-1]

,getid

(a[i]))

;rep

(i,0

, m)

return0;

}

poj2104 主席樹區間第k大

主席樹裸題,過了好久都快忘了。主席樹主要就是使多個線段樹並行於一顆樹中,儲存的是一段區間內數字出現的個數,所以先離散化。數字的更改只影響了一條從這個葉子節點到根的路徑,所以只有這條路徑是新的,其他的都沒有改變。比如對於某個節點,要往右邊走,那麼左邊那些就不用新建,只要用個指標鏈到原樹的此節點左邊就可...

poj 2104 主席樹 靜態區間第k大

主席樹入門題目,主席樹其實就是可持久化權值線段樹,rt i 維護了前i個數中第i大 小 的數出現次數的資訊,通過查詢兩棵樹的差即可得到第k大 小 元素。include include include using namespace std define lson i node i lson defi...

區間第K大(POJ 2104)

可持久化線段樹不是一顆完全二叉樹,所以不能用層次序編號,而應該直接記錄每個節點的左 右子節點的編號。可持久化線段樹維護了每次操作後線段樹的歷史形態。下面舉個簡單的例子來理解一下 以poj 2104為例 這棵樹是一顆不用修改的線段樹 題意 即多次查詢,查詢區間第k大的數。主席樹的學習 區間第k大 區間...