luogup3834(主席樹模板)

2022-05-06 16:12:08 字數 837 閱讀 3574

給定由n個正整數構成的序列,將對於指定的閉區間查詢m次其區間內第k小值。1≤n,m≤2e5。

有乙個做法,是對於每個序列的字首建一顆權值線段樹,然後通過權值線段樹相減得到的權值線段樹來查詢第k小值。由於單點修改只需要改動logn個結點,第i個主席樹可以依託第i-1個存在。具體的做法是將路徑上的點從上到下依次轉殖一遍。時間複雜度和空間複雜度都是nlogn。

#include #include #include using namespace std;

const int maxn=2e5+5, maxstree=maxn*60;

struct nodestree[maxstree];

//a:離散化後的序列 b:離散化的數對應的值

int n, m, a[maxn], b[maxn], cntu;

//cntnode:主席樹一共有幾個結點

int cntnode=1, root[maxn]; //root:第i棵線段樹的根的位置

//在主席樹的當前區間[l, r)中插入值為v的結點

//now位置的結點會被拷貝乙份生成新的結點

void insert(int &now, int l, int r, int v)

inline void get(int &x)

int main()

sort(b, b+n); cntu=unique(b, b+n)-b;

for (int i=0; ifor (int i=0; iint t1, t2, t3;

while (m--)

return 0;

}

洛谷3834 可持久化線段樹(主席樹模板)

主席樹經典問題,靜態查詢區間第k大數。拖了很久都沒有寫的模板。結果差不多此次 你賽都考,痛定思痛後,決定好好研究下。主席樹可以近似理解為權值線段樹的字首和的形式,詳細講解可參考wcr寫的主席樹講解 傳送門。回到該題,因為不涉及修改操作,所以我們建立n棵權值線段樹,先將資料離散化,這樣主席樹的權值就在...

洛谷3834 可持久化線段樹(主席樹模板)

主席樹經典問題,靜態查詢區間第k大數。拖了很久都沒有寫的模板。結果差不多此次 你賽都考,痛定思痛後,決定好好研究下。主席樹可以近似理解為權值線段樹的字首和的形式,詳細講解可參考wcr寫的主席樹講解 傳送門。回到該題,因為不涉及修改操作,所以我們建立n棵權值線段樹,先將資料離散化,這樣主席樹的權值就在...

P3834 模板 可持久化線段樹 1(主席樹)

主席樹 菜雞看了乙個晚上的時間才懂。感覺網上的部落格大都大亂。我也是找到了幾遍好一點的看了一下。參考部落格 參考部落格 首先,會主席樹的前提是會線段樹。還有,我們一般在用線段樹的時候,下標位置大都是採用了i 2 和i 2 1來作為i號的左右孩子。但是,在主席樹中,我們不可以把這種思想帶過來。因為主席...