主席樹(可持久化權值線段樹)

2021-09-25 15:23:33 字數 632 閱讀 5730

主席樹模板題,求n個數中,第l個數到第r個數的第k小的數 

#includeusing namespace std;

#define mid ((l+r)>>1)

struct node

tree[210000<<5];//主席樹一般開32倍的空間

int a[210000], b[210000],t[210000],cnt;

int build(int l, int r)//建空數

return num;

}int update(int pre,int l, int r,int x)//在主席樹上新增乙個線段樹

return num;

}int query(int u, int v,int l,int r,int k)

int main()

sort(b+1,b+n+1);

m = unique(b+1,b+n+1) -(b+1);//排序好,去掉重複元素的陣列的長度

cnt = 0;

t[0] = build(1,m);

for(i = 1; i <= n; i ++)

while(q --)

return 0;

}

模板 可持久化權值線段樹(主席樹)

洛谷3834 主席樹入門題,靜態區間第k小 權值線段樹 一棵線段樹的葉子tree l r 節點記錄序列中滿足a i l r的數的個數,非葉子節點記錄兒子的sum之和 這樣我們就可以快速地求出整個序列的第k小 或第k大 為了能夠查詢區間的第k小,我們在序列1 n的每個位置i建立一棵權值線段樹,那麼對於...

主席樹(可持久化線段樹)

我真弱。連主席樹都不會。主席樹相當於多個線段樹,由於相鄰兩棵線段樹的節點的值只有少許不同,因此可以對於和前一棵樹一樣的子樹乙個指標指過去,無需操作,這樣每棵樹o logn 總複雜度o nlogn 以下是區間k大 include include include define n 100005 defi...

主席樹 可持久化線段樹

首先要學會普通的線段樹,然後理解權值線段樹,而主席樹就是多個權值線段樹 我自己的理解 但是這多個權值線段樹之間有公共部分,節約了空間。它一開始是乙個空樹,後來逐個添數,記錄新增的這個數在那個範圍內,並 1,顯然它每次只更新了一條鏈,其他不需要變,這樣就有了多個版本的線段樹。如果求 l,r 範圍內第k...