P3834 可持久化線段樹(主席樹)入門

2021-10-03 20:21:02 字數 861 閱讀 7986

#include using namespace std;

#define ll long long

#define mem(a, b) memset(a,b,sizeof(a))

#define inf 0x3f3f3f3f

#define dbg printf("this is a input\n")

#define fi first

#define se second

#define mk(a, b) make_pair(a,b)

#define p_queue priority_queue

const int maxn = 200005;

int n , m;

int size, len;

int a[maxn], b[maxn];

int lc[maxn<<5], rc[maxn<<5], sum[maxn<<5], root[maxn];

//lc某點左兒子編號,rc某點右兒子編號,sum某點所維護的值,root用於儲存若干線段樹根節點的編號

void build(int& rt, int l , int r) //採用引用,同時給左右兒子編號,&rt相當於lc[rt],rt變換,lc[rt]也會變換

/*int build(int l, int r)

*/int update(int pre , int l , int r, int temp)

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

int main(void)

for(int i = 1 ; i <= m ; i ++)

}

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

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

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

這是個非常經典的主席樹入門題 靜態區間第k小 資料已經過加強,請使用主席樹。同時請注意常數優化 如題,給定n個整數構成的序列,將對於指定的閉區間查詢其區間內的第k小值。第一行包含兩個正整數n m,分別表示序列的長度和查詢的個數。第二行包含n個整數,表示這個序列各項的數字。接下來m行每行包含三個整數l...

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

題目鏈結 靜態查詢區間第k小問題。我們先要知道,權值線段樹可以維護整體區間的桶,查詢整體區間第k小。雖然這題是查詢子區間 l,r 的第k小,但我們可以轉化成整體區間第k小問題 我們對每個字首都建一棵權值線段樹,用於維護出現個數。則 1,r 區間對應的線段樹減去 1,l 1 對應的線段樹後,得到的那棵...