權值線段樹

2022-06-09 01:54:07 字數 565 閱讀 6569

/*

* 權值線段樹

* 本質上,權值線段樹就是線段樹的一種特殊維護

* * 權值線段樹是主席樹前置知識

*//*

* description

* [模板]權值線段樹: 請使用權值線段樹,實現以下操作

* -1:插入數x

* -2:刪除數x

* -3:查詢當前比數x小的數的個數

* -4:查詢排名為k的數

* * 資料範圍: 1 <= x <= 1e6

*/#include const int n = 1e6+5;

int tree[n<<2];

void update(int l,int r,int rt,int num,int delta)elseelse

}}int countlower(int l,int r,int rt,int num)else

return res;

}}int kmin(int l,int r,int rt,int k)else

}return l;

}

權值線段樹

維護全域性的值域資訊,每個節點記錄的是該值域的值出現的總次數。使用二分的思想 離散化的時候,需要用到 支援查詢全域性k小值,全域性rank,前驅,後繼等。單詞操作時間複雜度為o logn 空間複雜度為o n 相對於平衡樹的優勢 簡單,速度快 劣勢 值域較大時,我們需要離散化,變成離線資料結構 我認為...

權值線段樹

include using namespace std int n,m,tre 10003 4 laz 10003 4 void pushdown int num void update int num,int le,int ri,int x,int y,int z pushdown num int...

權值線段樹

權值線段樹是線段樹的一種,但是它與線段樹不同 線段樹的每個結點是用來維護一段區間的最大值或總和 而權值線段樹的每個結點儲存的一段區間有多少個數 權值線段樹主要用來查詢區間第k大或者第k小的值 現在有乙個陣列x 10 對陣列排序後為x 10 每個數的個數如下 1 32 2 3 24 1 5 18 1 ...