主席樹入門題目,主席樹其實就是可持久化權值線段樹,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...