查詢區間範圍內,第 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大 區間...