主席樹模板poj 2104

2022-07-26 16:15:12 字數 708 閱讀 6164

資料1:

主席樹主要是維護區間在第i個數插入之後,每個區間內的數出現的次數,這樣就需要維護n顆線段樹。

可持久化在於它可以儲存前面任意第i個數插入時的區間情況

同時每顆樹結構都是一樣的,因此可以相減得到特定區間的情況

#include #include #include #include #include #include #include #define ll long long

#define inf 1000000000ll

#define mod 1000000007

using namespace std;

ll read()

while(ch>='0'&&ch<='9')

return x*f;

}const int n=1e5+10;

const int m=n*20+10;

int tot,sz;

int root[n],ls[m],rs[m];

ll sum[m];

int v[n],ha[n];

void update(int l,int r,int x,int &y,int v)

int que(int l,int r,int rk)

return ha[l];

}int main()

return 0;

}

主席樹模板 POJ2104

離散化 對陣列排完序後用unique去重,unique返回的是去重後的陣列的末位址,減去第乙個元素的位址就能得到去重後的陣列大小,用lower bound查詢原數字在排序去重後的序列中的位序,用位序代替數字完成離散化。include include using namespace std defin...

主席樹模板(poj2104)

主席樹是可持久化線段樹,可以記錄線段樹的歷史版本。中和線段樹不同的是,l,r記錄的是左右子樹編號,因為普通的線段樹版本中,左右子樹自然就是o 1和o 1 1,但是主席樹中並不保證這個特性,所以需要記錄一下。是 include include include include include using...

主席樹入門 模板 POJ 2104

查詢區間第k大,而且沒有修改。主席樹的原理就是在現有的一顆線段樹上不斷加入新的節點,而加入的對於現有線段樹的影響另開一條鏈記錄下來,這樣我們就可以儲存線段樹的歷史版本,在查詢時只需要把區間減一下就可以了。include include include using namespace std cons...