poj 2104 主席樹 靜態區間第k大

2022-08-12 12:03:14 字數 730 閱讀 9705

主席樹入門題目,主席樹其實就是可持久化權值線段樹,rt[i]維護了前i個數中第i大(小)的數出現次數的資訊,通過查詢兩棵樹的差即可得到第k大(小)元素。

#include#include

#include

using

namespace

std;

#define lson(i) node[i].lson

#define rson(i) node[i].rson

const

int maxn=100005

;int

rt[maxn];

struct

node

node[maxn*30

];int

tot;

void push_up(int

i)int build(int l,int

r)

returni;}

int rebuild(int k,int x,int i,int nowl,int

nowr)

return

th;}

int query(int rt1,int rt2,int k,int nowl,int

nowr)

inta[maxn];

vector

ls;intmain()

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

return0;

}

poj2104 主席樹區間第k大

主席樹裸題,過了好久都快忘了。主席樹主要就是使多個線段樹並行於一顆樹中,儲存的是一段區間內數字出現的個數,所以先離散化。數字的更改只影響了一條從這個葉子節點到根的路徑,所以只有這條路徑是新的,其他的都沒有改變。比如對於某個節點,要往右邊走,那麼左邊那些就不用新建,只要用個指標鏈到原樹的此節點左邊就可...

主席樹模板 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...